为什么我的命令无法在当前目录的每个目录中创建指向一种类型文件的符号链接?

Why isn't my command to create symlinks to one type of file within every directory in my current directory working?

我有一个包含大约 500 个目录的目录。在这500个目录中的每一个目录中,都有两个我想要的文件,一个以.bam结尾,一个以.bai结尾。我正在尝试为所有以 .bam 或 .bai 结尾的文件创建指向新位置的符号链接。

我的目录结构如下:

/Parent_Directory/[500_Subdirectories]/file.bam 

我的目标目录是:

/New_Directory/bam_folder/

现在,我 运行 遇到了我当前代码的问题:

for d in Parent_Directory; do  
    ( cd "$d" && ln -s *.ba* New_Directory/Bam_Folder ); 
done

似乎一直在发生的是,我在 Bam_Folder 目录中创建了一个符号链接,指向一个名为 .ba

的不存在的文件

我到底做错了什么,我该如何解决这个问题?谢谢!

使用find;


改进了基于 的答案,防止程序对每个文件 运行,而是对所有文件只执行一次;

find /Parent_Directory/ -iname '*.bam' -exec ln -s -t /New_Directory/bam_folder {} +

原回答:

find /Parent_Directory/ -iname '*.bam' -exec ln -s {} /New_Directory/bam_folder/ ';'
  • -iname '*.bam'
    • .bam
    • 结尾的文件
  • -exec ln -s {} /New_Directory/bam_folder/
    • {}是找到的项目的路径(完整)
    • 第二个参数是符号链接的路径

Create symbolic link from find


注意;我没有测试命令,因为我们不确定文件结构是什么样的