为什么不像我期望的那样工作?

时间:2010-12-06 09:29:32

标签: regex bash csh

我只想做一件简单的事情。我在目录中获得了以下文件:

AppInterface.h  baa  PEMsg.h  PluginInterface.h

然后我发出命令:

ls | grep -v ".h" | rm -rf

令我沮丧的是,baa没有被删除。但是,这个:

ls | grep -v ".h"

按照我的预期给出baa。所以我想问题是rm如何接受输入,但我不知道为什么。在csh和bash中试过这个。

4 个答案:

答案 0 :(得分:8)

rm不从stdin获取输入,因此您无法将文件列表传送给它。

你需要

 rm `ls | grep -v ".h"`

ls | grep -v ".h" | xargs rm -rf

答案 1 :(得分:4)

您想使用xargs

ls | grep -v ".h" | xargs rm -rf

答案 2 :(得分:2)

rm没有从stdin中读取文件列表,这就是它无法正常工作的原因。您无法将文件名列表传递给rm

正确的方法是

find . -maxdepth 1 -not -name '*.h' -exec rm -rf {} +

使用多功能find实用程序。如果你认为这似乎很多工作:那就是正确的代价。但是,真的,一旦你熟悉了find,它就不会变得更糟。

答案 3 :(得分:1)

rm不接受标准输入的参数。你可能正在寻找的是命令替换(这里用反引号表示),其中一个命令的结果可以插入到另一个命令的参数中:

 rm -rf `ls | grep -v ".h"`