#bash
#bash
Вопрос:
Я пытаюсь создать символические ссылки на все файлы в списке имен файлов, где имена файлов в списке только частично совпадают с именами файлов.
У меня есть список частичных имен файлов (file_name_list.txt )
cat file_name_list.txt
>file_ABC
>file_DEF
>file_GHI
файлы, которые я хочу связать, находятся в папке, которая выглядит следующим образом:
ls -l <path to original files>
>new_file_ABC.txt
>file_ABC.fasta
>OCTOBER_file_DEF.fa
>file_DEF.gff
>file_GHI.txt
>file_XYZ.txt
где предполагаемый результат будет :
ls -l <path to symlinked files>
new_file_ABC.txt
file_ABC.fasta
OCTOBER_file_DEF.fa
file_DEF.gff
file_GHI.txt
что я пробовал:
while IFS= read -r file; do
[[ -e <path to files>/*"$file"* ]] amp;amp; ln -s <path to files>/*"$file"* .
done < file_name_list.txt ```
Комментарии:
1.
what I've tried:
разве это не сработало?2. это ничего не дает
Ответ №1:
files_dir="1"
links_dir="2"
f="filenames_list.txt"
find "$files_dir" -type f -printf "%f" | grep -zf "$f" |
xargs -r0 -I{} ln -rs "$files_dir/{}" "$links_dir/{}"
Отфильтруйте все имена файлов через a grep -f
с помощью списка шаблонов и создайте ссылки. Все приведенные выше команды используют аргументы, разделенные нулем, для сохранения имен файлов.
В общем, более полезно создавать ссылки с относительным путем, поскольку они будут по-прежнему функционировать, если вы переместите родительский каталог из обоих местоположений или смонтируете его. Чтобы упростить это, используйте -r
параметр с ln
, предоставляя аргументы такими, какие они есть.
пример
filenames_list.txt
:
file_ABC
file_DEF
file_GHI
mkdir -p 1
mkdir -p 2
touch 1/new_file_ABC.txt
touch 1/file_ABC.fasta
touch 1/OCTOBER_file_DEF.fa
touch 1/file_DEF.gff
touch 1/file_GHI.txt
touch 1/file_XYZ.txt
touch 1/file1.txt
touch 1/file2.txt
files_dir="1"
links_dir="2"
f="filenames_list.txt"
find "$files_dir" -type f -printf "%f" | grep -zf "$f" |
xargs -r0 -I{} ln -rs "$files_dir/{}" "$links_dir/{}"
результат ls
для dir 2/
file_ABC.fasta -> ../1/file_ABC.fasta
file_DEF.gff -> ../1/file_DEF.gff
file_GHI.txt -> ../1/file_GHI.txt
new_file_ABC.txt -> ../1/new_file_ABC.txt
OCTOBER_file_DEF.fa -> ../1/OCTOBER_file_DEF.fa