我有一个名为 的目录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.txt
STRBAM
New
目录中的输出应如下所示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