我有一个包含我要复制的文件名的字符串。但是,只存在其中一些文件。我当前的脚本如下所示:
echo $x | xargs -n 1 test -f {} && cp --target-directory=../folder/ --parents
但是,我总是收到test: {}: binary operator expected
错误。
我该怎么做?
答案 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}}的双引号。在极少数情况下,您需要一个简单的无引号变量插值。)