如何用包含新行的数组提供GNU Parallel?

时间:2016-01-13 16:46:34

标签: bash gnu-parallel

我想为数组的每个条目运行一个脚本,该数组存储包含空格(包括新行)的文件名。如何使用GNU Parallel将这样的条目发送到脚本?

此外,脚本可以获得两个参数 - 序列号和文件名吗?

1 个答案:

答案 0 :(得分:1)

解决方案是使用GNU Parallel的--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"`)