我想为数组的每个条目运行一个脚本,该数组存储包含空格(包括新行)的文件名。如何使用GNU Parallel将这样的条目发送到脚本?
此外,脚本可以获得两个参数 - 序列号和文件名吗?
答案 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"`)