在linux中使用find命令的管道

在linux中使用find命令的管道,linux,bash,unix,pipe,Linux,Bash,Unix,Pipe,我想在我的主目录中找到以“~”开头的文件,对它们进行数字排序,打印前五个,然后在Linux中使用find命令和管道删除它们。我有一个bash脚本: #!/bin/bash find ~/ -name "~*" | sort -n | head -5 | tee | xargs rm 这对于删除文件很有效,但我希望tee命令将删除的文件打印到标准输出。这个命令所做的只是删除文件,但在终端中并没有输出。我应该添加/更改什么? 谢谢。您可以在rm上使用verbose标志,它会告诉您它正在删除什么 f

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

#!/bin/bash
find ~/ -name "~*" | sort -n | head -5 | tee | xargs rm
这对于删除文件很有效,但我希望
tee
命令将删除的文件打印到标准输出。这个命令所做的只是删除文件,但在终端中并没有输出。我应该添加/更改什么?
谢谢。

您可以在rm上使用verbose标志,它会告诉您它正在删除什么

find ~/ -name "~*" | sort -n | head -5 |  xargs rm -v
使用
man rm
查看文档

-v、 --冗长

解释正在做什么


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

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

还要注意使用
-print0
排序中的所有相应选项。head,xargs
用空格和glob字符来处理文件名。

tee命令的作用是什么?你知道管道使用stdout,对吧?我知道管道将第一个命令的stdout与第二个命令的stdin连接起来是的,但是我认为用
tee
命令可以防止这种情况,因为这是我在讲座上得到的一个提示……我从来不知道
head
支持
-z
标志我相信只有gnu
head
支持
-z
我使用了这个解决方案,因为它很短,而且完全符合我的想象:)谢谢。不问题,很高兴我能帮助:)。是的,它很短,但只有在100%确定文件名不包含空格或全局字符时才使用它。是的,真正的空格可能很棘手,但我只是对原始代码做了尽可能少的更改。