Bash 如何为所有部分文件名匹配创建符号链接?

Bash 如何为所有部分文件名匹配创建符号链接?,bash,Bash,我试图创建指向文件名列表中所有文件的符号链接,其中列表中的文件名仅与文件名部分匹配 我有一个部分文件名列表(file\u name\u list.txt) 我要链接的文件位于如下所示的文件夹中: 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

我试图创建指向文件名列表中所有文件的符号链接,其中列表中的文件名仅与文件名部分匹配

我有一个部分文件名列表(file\u name\u list.txt)

我要链接的文件位于如下所示的文件夹中:

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
>新文件\u ABC.txt
>文件_ABC.fasta
>十月文件
>文件_DEF.gff
>文件_GHI.txt
>文件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
ls-l
新文件\u ABC.txt
文件_ABC.fasta
十月文件
文件_DEF.gff
文件_GHI.txt
我所尝试的:

while IFS= read -r file; do
    [[ -e <path to files>/*"$file"* ]] && ln -s <path to files>/*"$file"* .
 done < file_name_list.txt ```
而IFS=read-r文件;做
[[-e/*“$file”*]&&ln-s/*“$file”*。
完成
文件\u dir=“1”
链接\u dir=“2”
f=“filenames\u list.txt”
查找“$files_dir”-键入f-printf“%f\0”| grep-zf“$f”|
xargs-r0-I{}ln-rs“$files_dir/{}”$links_dir/{}”
使用模式列表通过grep-f过滤所有文件名,并创建链接。以上所有命令都使用空分隔参数来保留filanames

一般来说,使用相对路径创建链接更有用,因为如果移动或挂载两个位置的父目录,它们仍然可以正常工作。为了简化此操作,请将
-r
参数与
ln
一起使用,同时按原样提供参数


示例

文件名\u list.txt

文件\u ABC
文件定义
档案室
mkdir-p1
mkdir-p2
触摸1/new_file_ABC.txt
触摸1/file_ABC.fasta
触摸1/10月_文件_DEF.fa
触摸1/file_DEF.gff
触摸1/file_GHI.txt
触摸1/file_XYZ.txt
触摸1/file1.txt
触摸1/file2.txt
文件\u dir=“1”
链接\u dir=“2”
f=“filenames\u list.txt”
查找“$files_dir”-键入f-printf“%f\0”| grep-zf“$f”|
xargs-r0-I{}ln-rs“$files_dir/{}”$links_dir/{}”
目录的结果
ls
2/

file_ABC.fasta->../1/file_ABC.fasta
file_DEF.gff->../1/file_DEF.gff
文件_GHI.txt->../1/file_GHI.txt
新建文件\u ABC.txt->../1/新建文件\u ABC.txt
10月文件\u DEF.fa->../1/10月文件\u DEF.fa

我尝试过的:
它不管用吗?它什么都不产生
while IFS= read -r file; do
    [[ -e <path to files>/*"$file"* ]] && ln -s <path to files>/*"$file"* .
 done < file_name_list.txt ```