如何根据文本文件中的名称将文件符号链接到新目录?

如何根据文本文件中的名称将文件符号链接到新目录?

我有一个名为 的目录STRBAM。其中,我有以下来自另一个目录.bam的文件。symbolic linked

Sample-CK-4952-01A-01D-1719-10.bam
Sample-A6-5656-01A-21D-A270-10.bam
Sample-AZ-4315-01A-01D-1408-10.bam
Sample-T9-A92H-01A-11D-A36X-10.bam
Sample-DY-A1H8-01A-21D-A152-10.bam
Sample-DC-5869-01A-01D-1657-10.bam
Sample-CI-6623-01B-11D-1826-10.bam
Sample-AA-3980-01A-02W-0995-10.bam
Sample-F4-6569-01A-11D-1771-10.bam

All.txt我在同一目录中还有一个文本文件,其中包含如下信息:

    submitter_id                    Patient
Sample-CK-4952-01A-01D-1719-10  Sample-CK-4952
Sample-A6-5656-01A-21D-A270-10  Sample-A6-5656
Sample-AZ-4315-01A-01D-1408-10  Sample-AZ-4315
Sample-T9-A92H-01A-11D-A36X-10  Sample-T9-A92H
Sample-DY-A1H8-01A-21D-A152-10  Sample-DY-A1H8
Sample-DC-5869-01A-01D-1657-10  Sample-DC-5869

我还有另一个目录NEW。我只想使用目录中文件.bam中的信息将文件符号链接到目录中All.txtSTRBAMNew

目录中的输出应如下所示New

Sample-CK-4952-01A-01D-1719-10.bam
Sample-A6-5656-01A-21D-A270-10.bam
Sample-AZ-4315-01A-01D-1408-10.bam
Sample-T9-A92H-01A-11D-A36X-10.bam
Sample-DY-A1H8-01A-21D-A152-10.bam
Sample-DC-5869-01A-01D-1657-10.bam

awk我尝试使用命令执行以下操作xargs,但它没有使用All.txt文件中的信息仅链接我需要的所需文件,而是链接了所有文件。

awk 'NR > 1{ print $1 }' All.txt | xargs -I {} ln -s /path/to/STRBAM/* /path/to/New/

答案1

由于您在源路径中使用 a 而不是,因此您将所有文件链接/path/to/STRBAM/*/path/to/New/多次,即:*{}

awk 'NR > 1{ print $1 }' All.txt | xargs -I{} ln -s /path/to/STRBAM/{}.bam /path/to/New/

如果要添加额外检查源目录中是否存在符号链接,可以使用一个小型 shell 脚本并将源目录和目标目录作为前两个位置参数传递给脚本:

awk 'NR > 1{ print $1 }' All.txt | xargs sh -c '
 src=$1; shift
 dest=$1; shift
 for i do
   if [ -h "$src/${i}.bam" ]; then
     ln -s "$src/${i}.bam" "$dest"
   fi
 done
' sh /path/to/STRBAM /path/to/New

相关内容