当前位置: 首页 > 面试题库 >

Linux为什么我无法通过管道找到结果到rm?

韦辰钊
2023-03-14
问题内容

很抱歉,如果这是一个noobie问题,但我找不到很好的答案。

要找到然后删除我可以使用的东西

find . -name ".txt" -exec rm "{}" \;

但是为什么我不能像这样将结果通过管道传递给rm

find . -name ".txt" | rm

就像我将其输送到grep

find . -name ".txt" | grep a

我从某处读到rm不会从stdin接收输入,因此我无法通过管道传输它,但这是什么意思?当我输入rm
a.txt时,它会从标准输入中读取,就像我可以grep一样吗?还是stdin和命令行之间有区别。帮帮我!


问题答案:

要扩展@Alex Gitelman的答案:是的,“标准输入”和命令行之间存在区别。

键入时rm a.txt b.txt c.txt,列出的文件rm称为自 变量,
并通过特殊变量(argv内部称为rm)供rm使用。另一方面,标准输入看起来像一个名为的文件的Unix程序stdin。程序可以从此“文件”中读取数据,就像打开磁盘上的常规文件并从中读取数据一样。

rm像许多其他程序一样,从命令行获取其参数,但忽略标准输入。您可以随意传送任何内容。它只会丢弃这些数据。那就是xargs派上用场的地方。它读取标准输入上的行并将其转换为命令行参数,因此您可以有效地将数据通过管道传输到另一个程序的命令行。这是一个巧妙的把戏。

例如:

find . -name ".txt" | xargs rm
find . -name ".txt" | grep "foo" | xargs rm

请注意,如果有任何包含换行符或空格的文件名,这将无法正常工作。要处理包含换行符或空格的文件名,应改用:

find . -name ".txt" -print0 | xargs -0 rm

这将告诉您find以空字符而不是换行符来终止结果。但是,grep将无法像以前那样工作。而是使用此:

find . -name ".txt" | grep "foo" | tr "\n" "\0" | xargs -0 rm

这段时间tr用于将所有换行符转换为空字符。



 类似资料:
  • 我搞不懂这本书是怎么学的。管道管道工作正常。 文件中有一些解释。例如,它们是什么意思: 具有最终估计器的变换管道。 为了让我的问题更清楚,什么是<代码>步骤?它们是如何工作的? 编辑 由于有了这些答案,我可以更清楚地回答我的问题: 当我调用管道并作为步骤传递两个变压器和一个估计器时,例如: 当我叫它时会发生什么? 我不知道估计器是如何成为变压器的,变压器是如何安装的。

  • 问题内容: 我在golang中使用mgo库进行mongo操作,这是我的代码: 我得到这个输出: 但是我检查了一下,文档存在于mongo中,但是到这里没有结果,我不知道我在想什么… 问题答案: 如错误消息所提示,对象ID的长度恰好为12个字节(12个字节的数据)。您看到的24个字符长的ID是ID的12个字节的十六进制表示形式(1个字节=> 2个十六进制数字)。 使用该函数获取十六进制表示形式是否可用

  • 我有两台机器:machine foo()运行redis服务器,而machine bar()运行通过Jedis连接到foo的java应用程序。当给jedis提供地址时,一切都很好。 但是我不信任foo和bar之间的路由器,redis也不支持SSL。因此,我设置了一个从bar到foo:的ssh隧道 现在,从bar中,我可以直接在或通过隧道在成功地telnet到foo上的redis。对于jedis,如果

  • 问题内容: 我无法获取Alamofire请求的结果。因此,我创建了从json异步调用获取的数组的输出。我无法从dispatch {…}中获取resultArray。当我添加println来调试代码。第二个出现在第一个之前。我只想要resultArray从Alamofire获取数据以显示在UIPickerView中。请帮助!!! 这是我的代码 这是我在控制台上的输出 请我真的需要知道我正在发生什么以

  • 输入:p=1,r=55,x=5 产量:5 50 从1到55迭代后,如果数字之和=5,则可能的结果将5,14,23,32,41,50因此输出是一个越来越小的结果 我试着做下面的代码,但我正在从键错误中获取索引。我想这是因为此列表中没有添加任何内容。

  • 问题内容: 我正在尝试打开一个保存在源文件夹本身中的CSV文件名“ logger.csv”。 但是,这一直在给我一个“找不到文件”错误。 问题答案: 如果您现在就使用相对路径,则该文件需要存在于项目根目录中, 而不是 存在于java文件的目录中。 考虑以下层次结构: 不管用。 将 现在 的工作。(注意,该文件与src目录相邻。)