2016-01-13 53 views
1

我想爲存儲包含空格(包括新行)的文件名的數組的每個條目運行腳本。如何使用GNU Parallel將這樣的條目發送到腳本?如何使用包含新行的數組來提供GNU Parallel?

另外,腳本是否可以獲得兩個參數 - 序號和文件名?

+0

嗯,沒有太多的評論,真的。 'parallel'命令應該以這種方式運行腳本: './script_name <序列號>「文件名與 新行」,其中文件名是shell(Bash)變量'files'的一個元素。 –

回答

1

的解決方案是使用GNU並行的--null開關(或其別名-0),其告訴它使用NULL分隔符,而不是新的生產線。這樣,包含新行的元素的數組可以傳遞給GNU Parallel,例如像這樣:

parallel --gnu --null "command_to_be_executed" "{}" ::: "${array[@]}" 

如果你也想的命令來獲取它的序列號,與{#}"{}"

如果你要使用這個命令來處理一些文件,其名稱(或路徑導致他們)可能會包含新的生產線,這裏是array如何構建(新行安全)的例子:

while IFS= read -r -d $'\0' file; do 
    files+=("$file") 
done < <(`find "/path/to/files/" -maxdepth 1 -name "*.csv" -print0"`) 
相關問題