目前我的工作如下:
步骤1:
locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
第2步:
通过复制粘贴每一行来手动执行删除。
rm /home/abc/fooBar
rm /home/abc/Music/fooBar
我该如何一步完成此操作?例如
定位 fooBar > rm
谢谢。
答案1
正如其他几位小伙伴已经提到的,xargs 是你的好朋友。它是一款非常强大的工具,我将尝试解释它,并为常见的问题提供解决方法。
xargs 的作用是从输入中取出一行,并将其附加到另一个命令,对输入中的每一行执行该命令。因此,通过输入locate foobar | xargs rm -f
,locate 命令的输出将是修补到末端命令rm -f
,并对 生成的每一行执行locate foobar
。
问题:
但是如果locate返回的行中有空格怎么办?这将破坏命令,rm -f
因为传递给rm的参数必须是文件(除非使用-r开关),并且如果文件路径包含空格,则需要对其进行转义或引用。
xargs 提供了 -i 开关,用于代替输入到后面的命令中,而不是直接附加。所以我将建议改为
locate foobar | xargs -ixxx rm -f 'xxx'
现在仅当locate返回的文件名包含撇号时才会中断。
我必须同意 qbi 的观点,你应该小心使用 rm -f! 对 xargs 使用 -p 标志,或者在将其提供给 xargs 之前单独运行 allocate foobar,或者从 rm 中删除 -f。
locate foobar | xargs -p -ixxx rm -f 'xxx'
答案2
您可能需要更多选项才能与 一起使用xargs
。请先使用 进行测试xargs -p
。如果可以,请删除该-p
选项:
locate foobar | xargs rm
答案3
要删除所有由locate返回的文件,请在终端中发出以下命令
locate foobar | xargs rm -f