Command-Line

如何在從文件動態獲取參數時使用並行命令?

  • July 25, 2021

假設我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用來完成此操作並從文件中動態獲取參數?

如果您使用 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)。您的命令行會因此而愛上您。

引用自:https://unix.stackexchange.com/questions/659766