将 grep 输出提供给 rm

将 grep 输出提供给 rm

我试图将输出通过管道grep传输到rm,但它输出无用的东西。是否需要任何开关rm?或者可以rm直接提供正则表达式吗?

ls | grep '^\[Daruchini'| rm

rm:缺少操作数尝试“rm --help”以获取更多信息。

答案1

您需要使用xargs将标准输入转换为 的参数rm

$ ls | grep '^Dar' | xargs rm

(注意文件名中的特殊字符;使用 GNU grep,您可能更喜欢

$ ls | grep -Z '^Dar' | xargs -0 rm

另外,虽然 shell 不使用正则表达式,但这是一个简单的模式:

$ rm Dar*

(同时,我想我需要更多的睡眠。)

答案2

不解析输出ls

到这里,就可以很简单的让shell过滤出你想要的文件了。请注意,是 shell 扩展了模式Dar*,而不是rm命令。 shell 执行的模式扩展称为通配

rm Dar*

在更复杂的情况下,查找find命令。

答案3

为了将输出作为参数传递,我倾向于使用 while 循环,因为我不熟悉 xargs。

ls | grep '^Dar' | while read line; do rm "$line";done;

答案4

在 Catalina 10.15.3 上,使用 zsh,我发现处理换行符和空格的方法是:

 sudo find / | grep -i 'yourString' | tr '\n' '\0' | xargs -0 -n1 rm -r 

换句话说,在用“rm -0”删除它之前,先翻译没有空格的新行(tr \n 到 \0)。

另外,我总是使用“find”+“grep -i”,因为“find -iname”有时不会输出任何内容。

最后一点:它会查找并删除与“yourString”匹配的文件和文件夹。仅对于文件,指定“find -type f”,然后 rm 的选项“-r”就没用了。

相关内容