为什么 rm 不能按我的预期工作?

发布于 2024-10-05 21:18:56 字数 339 浏览 4 评论 0原文

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

AppInterface.h  baa  PEMsg.h  PluginInterface.h

然后我发出命令:

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

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

ls | grep -v ".h"

正如我所期望的那样给出了 baa 。所以我猜问题在于 rm 如何接受输入,但我不知道为什么。在 csh 和 bash 中都尝试过这个。

I just want to do a simple thing. I got the following files in a directory:

AppInterface.h  baa  PEMsg.h  PluginInterface.h

Then I issue the command:

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

Much to my dismay, baa does not get deleted. But, this:

ls | grep -v ".h"

gives baa as I expect. So I guess the problem is with how rm takes input but I don't know why. Tried this both in csh and bash.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

苏辞 2024-10-12 21:18:56

rm 不从标准输入获取输入,因此您无法将文件列表通过管道传递给它。

你需要

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

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

rm doesn't take input from stdin so you can't pipe the list of files to it.

You need

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

or

ls | grep -v ".h" | xargs rm -rf
一张白纸 2024-10-12 21:18:56

您想使用 xargs

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

You want to use xargs:

ls | grep -v ".h" | xargs rm -rf
梦初启 2024-10-12 21:18:56

rm 不会从标准输入读取文件列表,这就是它不起作用的原因。您无法通过管道将文件名列表传递给 rm

正确的方法是

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

使用多功能的 find 实用程序。如果您认为这看起来工作量很大:这就是正确性的代价。但是,实际上,一旦您熟悉了 find,情况也不会更糟。

rm doesn't read a list of files from stdin, which is why it's not working. You cannot pipe a list of file names to rm.

The correct way to do this would be

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

Using the versatile find utility. If you think this seems like a lot of work: that is the price of correctness. But, really, it isn't much worse once you're familiar with find.

最后的乘客 2024-10-12 21:18:56

rm 不从标准输入获取参数。您可能正在寻找的是命令替换(此处由反引号表示),其中一个命令的结果可以插入到另一个命令的参数中:

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

rm does not take its arguments from standard input. What you're probably looking for is command substitution (indicated by the backticks here), where the result of one command can be inserted into the arguments of another:

 rm -rf `ls | grep -v ".h"`
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文