2017-04-27 31 views
2

我想在我的主目录中找到以'〜'开头的文件,按数字排序,打印前五个并使用Linux中的find命令和管道删除它们。我有一个bash脚本:在linux中使用管道和find命令

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

这工作正常删除的文件,但我期待tee命令来删除的文件打印到标准输出。所有这个命令的作用是删除文件,但在终端输出。我应该添加/更改什么? 谢谢。

+0

'tee'命令的用途是什么? – hek2mgl

+0

你知道一个管道消耗stdout,对吧? –

+0

我不明白,管与第二的是标准输入连接第一个命令的标准输出,但我认为这是可能以某种方式防止以'因为它是一个提示,我在讲课了tee'命令 – Luki

回答

3

你可以只使用于RM冗余标志,它会告诉你什么它删除

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

使用man rm看到文档

-v,--verbose

解释正在做什么

+0

我用这个解决方案,因为它很短,并且完全符合我的想象:)谢谢。 – Luki

+0

没问题,很高兴我可以帮助:)。 – Danny

+0

是的它很短,但只有当你100%确定文件名不包含空格或水平字符时才使用它。 – anubhava

3

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

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

还要注意使用-print0sort. head, xargs所有相应的选项,以解决与空白和水珠字符的文件名。

+0

不知道'head'支持'-z'标志 – hek2mgl

+0

我相信只有gnu'head'支持'-z' – anubhava