如果文件存在,则xargs复制

时间:2013-05-27 14:12:21

标签: linux bash xargs cp

我有一个包含我要复制的文件名的字符串。但是,只存在其中一些文件。我当前的脚本如下所示:

echo $x | xargs -n 1 test -f {} && cp --target-directory=../folder/ --parents

但是,我总是收到test: {}: binary operator expected错误。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

xargs只能运行一个简单的命令。 &&部分由shell解释,这不是您想要的。只需使用您要运行的命令创建一个临时脚本:

cat > script.sh
test -f "$1" && cp "$1" --target-directory=../folder/ --parents

控制-d

chmod u+x ./script.sh
echo $x | xargs -n1 ./script.sh

另请注意{}不需要-n1,因为该参数用作一行的最后一个字。

答案 1 :(得分:2)

您需要向-i提供xargs标记,以便用{}替换文件名。

但是,您似乎希望将xargs提供给cp,而不是echo "$x" | xargs -i sh -c 'test -f {} && cp --target-directory=../folder/ --parents {}' 。也许尝试像

这样的东西
echo

(另请注意使用带有{{1}}的双引号。在极少数情况下,您需要一个简单的无引号变量插值。)