如何删除定位返回的所有文件


13

目前他是我的工作:

步骤1:

locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar

第2步:

通过复制粘贴每一行来手动执行删除。

rm /home/abc/fooBar
rm /home/abc/Music/fooBar

如何一步一步做到这一点?就像是

定位fooBar> rm

谢谢。


你想要这个吗?rm -i 定位fooBar``
LFC_fan 2010年

我不确定以上内容。我只想从运行locate命令时返回的路径中删除所有文件。
theTuxRacer 2010年

Answers:


13

正如其他小节已经提到的那样,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'

现在,只有在由locate返回的文件名中包含撇号时,它才会中断。

我必须同意qbi,否则在使用 rm -f时应格外小心!使用-p标志来xargs,或者仅在将它提供给xargs之前单独运行定位foobar,或者从rm中删除-f。

locate foobar | xargs -p -ixxx rm -f 'xxx'

9
要对名称中带有奇异字符(换行符,引号,撇号等)的文件保持鲁棒性,可以使用-0--null)选项定位和xargs。这使用安全的ASCII NUL字符来分隔文件名:locate -0 foobar | xargs -0 rm
Jukka Matilainen 2010年

1
+1回复,并选择提及
陷阱

我试过了,但是没有用。
Pronoy999 '18

部分工作
SteveS '19

7

您可能需要使用更多选项xargs。首先使用进行测试xargs -p。如果可以,请删除该-p选项:

locate foobar | xargs rm

6

要删除由locate返回的所有文件,请在终端中发出以下命令

locate foobar | xargs rm -f

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.