unix中的管道 - 是作为参数隐式提供的值吗?

时间:2013-06-04 09:47:15

标签: unix grep pipe

我想从当前目录中以递归方式删除以.orig结尾的所有文件。

这会起作用吗?

ls -R | grep ".orig$" | rm

grep的结果是否作为rm的参数隐式传递到这里?

2 个答案:

答案 0 :(得分:4)

如下:

find ./ -type f -name "*.orig" -exec rm "{}" \;

似乎对我有用,但最好先用echo代替rm对其进行测试;)

ls -R不会有五个正确的格式输出直接传递给rm(通过grep),因为它为每个目录单独列出文件,如:

.:
local1.orig local

./dir:
nested1.orig nested2.orig

如果你想使用grep做类似的事情,你需要像这样使用xargs

grep ".orig$" | xargs rm

答案 1 :(得分:1)

不,他们不是。但这就是xargs的目的:

ls -R | grep ".orig$" | xargs rm -i

会做你想要的。 -i不是必需的,但在第一次运行时使用是个好主意。 (它会提示您删除文件。如果您确信答案始终为是,则在没有-i的情况下中止并重新运行。)