使用并行方式将多个文件复制到一个目录

使用并行方式将多个文件复制到一个目录

我使用以下脚本将多个文件复制到一个文件夹中:

{ echo $BASE1; echo $BASE2; echo $BASE3; } | parallel cp -a {} $DEST

有没有办法只使用一个带有大括号扩展的 echo $BASE ?

我的意思是这样的:

{ echo $BASE{1..3} } | parallel cp -a {} $DEST

答案1

您可以使用数组:

BASES[0]=...
BASES[1]=...
BASES[2]=...
# or BASES+=(...)
# or BASES=(foo bar baz)
echo "${BASES[@]}" | parallel cp -a {} $DEST

为了使其更安全(特别是变量中的空格和换行符),类似这样的操作应该更可靠:

printf "%s\0" "${BASES[@]}" | parallel -0 cp -a {} "$DEST"

注意:数组不在 POSIX 中,但这适用于当前版本的 bash 和 ksh。

答案2

您可以使用,printf代替echo来获取所需的换行符:

 env printf "%s\n" $BASE{1..3} | parallel cp -a {} $DEST

相关内容