the*_*cer 15 command-line pipe
目前他就是我所做的:
第1步:
locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
Run Code Online (Sandbox Code Playgroud)
第2步:
通过复制粘贴每一行来手动执行删除。
rm /home/abc/fooBar
rm /home/abc/Music/fooBar
我如何一步做到这一点?就像是
找到 fooBar > rm
谢谢。
fin*_*ley 15
正如其他人已经提到的, xargs 是你的朋友。这是一个非常强大的工具,我将尝试解释它并为常见问题提供解决方法。
xargs 所做的是从输入中取出一行,并将其附加到另一个命令,对输入中的每一行执行该另一个命令。因此,通过打字locate foobar | xargs rm -f,所述定位命令的输出将被贴在所述端的的rm -f命令,并用于通过产生每一行执行的locate foobar。
问题:
但是如果 locate 返回的行中有空格怎么办?这将破坏rm -f命令,因为传递给 rm 的参数需要是文件(除非您使用 -r 开关),并且如果文件路径包含空格,则需要对其进行转义或引用。
xargs 提供了 -i 开关,用于将输入替换到后面的命令中,而不仅仅是附加它。所以我将建议更改为
locate foobar | xargs -ixxx rm -f 'xxx'
Run Code Online (Sandbox Code Playgroud)
现在只有当 locate 返回的文件名包含撇号时才会中断。
我必须同意 qbi,你应该小心使用 rm -f!对 xargs 使用 -p 标志,或者在将它提供给 xargs 之前单独运行 locate foobar,或者从 rm 中删除 -f。
locate foobar | xargs -p -ixxx rm -f 'xxx'
Run Code Online (Sandbox Code Playgroud)
您可能需要更多选项才能与xargs. 先用xargs -p. 如果没问题,去掉这个-p选项:
locate foobar | xargs rm
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15378 次 |
| 最近记录: |