【问题标题】:Using pipes with find command in linux在linux中使用带有find命令的管道
【发布时间】:2017-04-27 12:20:15
【问题描述】:

我想在我的主目录中查找以“~”开头的文件,对它们进行数字排序,打印前五个并在 Linux 中使用 find 命令和管道删除它们。我有一个 bash 脚本:

#!/bin/bash
find ~/ -name "~*" | sort -n | head -5 | tee | xargs rm

这适用于删除文件,但我期待 tee 命令将已删除的文件打印到标准输出。该命令所做的只是删除文件,但在终端中有这样的输出。我应该添加/更改什么? 谢谢。

【问题讨论】:

  • tee 命令的用途是什么?
  • 你明白管道消耗标准输出,对吧?
  • 我知道管道将第一个命令的标准输出与第二个是的标准输入连接起来,但我认为可以通过tee 命令以某种方式防止这种情况,因为这是我在讲座中得到的提示...

标签: linux bash unix pipe


【解决方案1】:

你可以在 rm 上使用详细标志,它会告诉你它正在删除什么

find ~/ -name "~*" | sort -n | head -5 |  xargs rm -v

使用man rm 查看文档

-v, --verbose

解释正在做什么

【讨论】:

  • 我使用了这个解决方案,因为它很短并且完全符合我的想象:) 谢谢。
  • 没问题,很高兴我能帮上忙 :)。
  • 是的,它很短,但只有在您 100% 确定文件名不包含空格或全局字符时才使用它。
  • 是的,真正的空白可能很棘手,但是我只是对原始代码进行了尽可能少的更改。
【解决方案2】:

您可以使用rm -v 打印每个删除文件名:

find ~ -name '~*' -print0 | sort -zn | head -z -n 5 | xargs -0 rm -v

还要注意使用-print0sort. head, xargs 中的所有相应选项来处理带有空格和全局字符的文件名。

【讨论】:

  • 从来不知道head 支持-z 标志
  • 我相信只有gnu head支持-z
猜你喜欢
  • 2014-04-13
  • 2012-06-18
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
相关资源
最近更新 更多