我试图将输出通过管道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
答案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”就没用了。