根据相应的文件名创建符号链接

根据相应的文件名创建符号链接

我想为我的文件创建符号链接(总共350个文件

cd ./my_files
PD26400a.fixedheader.hs37d5.cram
PD26400a.fixedheader.hs37d5.cram.crai
...

我有一个文本文件,其中 my_files 目录(第 2 列)中的每个文件名都对应于其旧名称(第 1 列)

SAMEA3471108.fixed.GRCh37d5.cram  PD26400a.fixedheader.hs37d5.cram
SAMEA3471108.fixed.GRCh37d5.cram.crai  PD26400a.fixedheader.hs37d5.cram.bai
SAMEA3471112.fixed.GRCh37d5.cram  PD26400b.fixedheader.hs37d5.cram
SAMEA3471112.fixed.GRCh37d5.cram.crai  PD26400b.fixedheader.hs37d5.cram.bai

我想生成符号链接并得到这个输出

SAMEA3471108.fixed.GRCh37d5.cram -> PD26400a.fixedheader.hs37d5.cram
SAMEA3471108.fixed.GRCh37d5.cram.crai -> PD26400a.fixedheader.hs37d5.cram.bai
SAMEA3471112.fixed.GRCh37d5.cram -> PD26400b.fixedheader.hs37d5.cram
SAMEA3471112.fixed.GRCh37d5.cram.crai -> PD26400b.fixedheader.hs37d5.cram.bai

我怎样才能做到这一点?

答案1

既然你已经有了两列,你尝试过 awk 吗?

echo 'SAMEA3471108.fixed.GRCh37d5.cram  PD26400a.fixedheader.hs37d5.cram' | awk '{print $1, "->", $2}'
SAMEA3471108.fixed.GRCh37d5.cram -> PD26400a.fixedheader.hs37d5.cram

你可以使用这样的东西,也许:

awk '{ system("ln $1 $2") }

答案2

$ < <(awk 'NF==2 {print "ln -s -T "$1 " " $2}' filein) xargs -0 bash -c  

filein包含两列的文本文件在哪里。

编辑:将-s标志添加到lncmd 调用中,假设您需要符号链接而不是默认的硬链接。

相关内容