使用 GNU Parallel 复制和重命名文件

使用 GNU Parallel 复制和重命名文件

我有一个简单的脚本,我想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

相关内容