我只想做一件简单的事。我在一个目录中得到了以下文件:
AppInterface.h baa PEMsg.h PluginInterface.h
然后我发出命令:
ls | grep -v ".h" | rm -rf
令我沮丧的是,baa
没有被删除。但是这个:
ls | grep -v ".h"
正如baa
我所料。所以我想问题在于如何rm
输入,但我不知道为什么。在 csh 和 bash 中都试过这个。
rm 不从标准输入获取输入,因此您无法将文件列表通过管道传输给它。
你需要
rm `ls | grep -v ".h"`
或者
ls | grep -v ".h" | xargs rm -rf
你想使用xargs:
ls | grep -v ".h" | xargs rm -rf
rm
不从标准输入读取文件列表,这就是它不起作用的原因。您不能将文件名列表通过管道传输到rm
.
正确的方法是
find . -maxdepth 1 -not -name '*.h' -exec rm -rf {} +
使用多功能查找实用程序。如果您认为这似乎需要大量工作:这就是正确性的代价。但是,实际上,一旦您熟悉了 find,情况并不会更糟。
rm
不从标准输入中获取其参数。您可能正在寻找的是命令替换(由此处的反引号表示),其中一个命令的结果可以插入到另一个命令的参数中:
rm -rf `ls | grep -v ".h"`