我有一个简单的脚本,我想files.lst
根据其中的名称列表复制和重命名文件names.lst
**name.lst**
100GV200.vcf
150GV200.vcf
14300GV200.vcf
**file.lst**
file1.txt
file2.txt
file3.txt
到目前为止我的脚本如下所示:
parallel --link -k "cp {} {}" :::: file.lst :::: name.lst
不幸的是我回来了:
cp: target `100GV200.vcf` is not a directory
cp
当我在终端中运行单个命令时,它工作得很好
cp file1.txt 100GV200.vcf
我在理解 GNU 并行如何读取参数时哪里出错了?
答案1
不要为并行的混乱接口而烦恼;对于没有特殊字符的文件名,您可以直接使用
paste file.lst name.lst | xargs -n2 echo mv
答案2
使用 {1} 和 {2} 表示法:
parallel --link -k cp {1} {2} :::: file.lst :::: name.lst
对我有用,它也适用于引号
parallel --link -k "cp {1} {2}" :::: file.lst :::: name.lst
要使其与 {} 配合使用,您必须执行如下操作:
parallel --link -k "cp {}" :::: file.lst :::: name.lst
因为parallel会自动追加两个文件的行。
答案3
我使用下面的命令来实现相同的效果
paste file.lst name.lst| awk '{print "cp" " " $1 " " $2}'|sh