【问题标题】:Why isn't my command to create symlinks to one type of file within every directory in my current directory working?为什么我在当前目录的每个目录中创建指向一种类型文件的符号链接的命令不起作用?
【发布时间】:2020-12-18 15:58:51
【问题描述】:

我有一个目录,其中包含大约 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

的不存在的文件文件

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

【问题讨论】:

  • 符号链接不能是相对的。它应该是完整的文件路径。
  • 感谢您的帮助!如果目录和文件名是可变的,我将如何为每个目录中的每个文件执行此操作?

标签: linux bash bioinformatics


【解决方案1】:

使用find


基于@oguz ismail's comment 的改进答案阻止程序为每个文件运行,而是只对所有文件执行一次;

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


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

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2012-01-25
    • 2015-11-17
    相关资源
    最近更新 更多