Zul*_*kis 2 linux bash xargs cp
我得到了一个包含要复制的文件名的字符串。但是,只有其中一些文件存在。我当前的脚本如下所示:
echo $x | xargs -n 1 test -f {} && cp --target-directory=../folder/ --parents
Run Code Online (Sandbox Code Playgroud)
但是,我总是收到test: {}: binary operator expected错误消息。
我怎样才能做到这一点?
您需要提供-i标志xargs以代替{}文件名。
但是,您似乎希望xargs进入cp,而事实并非如此。也许尝试类似的东西
echo "$x" |
xargs -i sh -c 'test -f {} && cp --target-directory=../folder/ --parents {}'
Run Code Online (Sandbox Code Playgroud)
(还要注意使用双引号和echo。很少有您想要裸露的不带引号的变量插值的情况。)
要一次传入多个文件,您可以在以下文件中使用for循环sh -c:
echo "$x" |
xargs sh -c 'for f; do
test -f "$f" && continue
echo "$f"
done' _ |
xargs cp --parents --target-directory=".,/folder/"
Run Code Online (Sandbox Code Playgroud)
该_参数是因为第一个参数sh -c是用来填充$0,不$@
| 归档时间: |
|
| 查看次数: |
4159 次 |
| 最近记录: |