如何在从文件动态获取参数时使用并行命令?

如何在从文件动态获取参数时使用并行命令?

假设我列出了file多个文件的路径,如下所示:

/home/user/file1.txt
/home/user/file2.txt
/home/user/file3.txt
/home/user/file4.txt
/home/user/file5.txt
/home/user/file6.txt
/home/user/file7.txt

假设我想以 3 倍 3 倍的速度并行复制这些文件。我知道使用该命令parallel我可以并行执行特定命令,如下所示:

parallel bash -c "echo hello world" -- 1 2 3

然而,这种运行方式parallel是硬编码的,因为即使我在引号内使用变量,它也只会有一个固定的参数。我想执行parallel从文件动态获取参数的命令。举个例子,假设我想从file运行的三个并行进程(类似cp "$file" /home/user/samplefolder/)中复制所有文件。我该怎么做?我可以使用任何参数来parallel完成此任务并从文件中动态获取参数吗?

答案1

如果您使用 GNU Parallel,您可以执行以下操作之一:

parallel cp {} destination/folder/ :::: filelist
parallel -a filelist cp {} destination/folder/
cat filelist | parallel cp {} destination/folder/

考虑花 20 分钟阅读《GNU Parallel 2018》一书的第 1+2 章(印刷版:http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html在线的:https://doi.org/10.5281/zenodo.1146014)。您的命令行会因此而喜欢您。

相关内容