如何按名称系列查找和删除此文件

时间:2015-08-28 10:23:29

标签: linux ls

根据日期,我的一个目录中的文件列表是:

2015-08-28 12:05 A01.tar
 2015-08-28 11:31 A02.tar
 2015-08-28 10:26 A03.tar
 2015-08-28 10:16 A04.tar
 2015-08-28 07:26 A05.tar
 2015-08-28 00:26 A06.tar
 2015-08-28 00:26 A07.tar
 2015-08-27 16:14 AA01.tar
 2015-08-27 14:58 CV03.tar
 2015-08-27 11:59 CV04.tar
 2015-08-27 11:32 CV05.tar
 2015-08-27 11:22 CV07.tar
 2015-08-27 11:12 CV08.tar
 2015-08-27 11:32 CV09.tar

现在我想只保留每个系列的5个最新文件(系列= CV,A,AA)。例如,我想删除

CV09.tar
A06.tar
A07.tar

并保留其余部分。我应该使用“wc -l”吗?

2 个答案:

答案 0 :(得分:0)

使用“查找”命令。与此相似

find /var/log/httpd/ -name "*CV.tar" -mtime +5 -delete

答案 1 :(得分:0)

ls -t | sed -e '1,5d' | xargs -d '\n' rm

这应该处理文件名中的所有字符(换行符除外)。

这里发生了什么?

  • ls -t按修改时间的降序列出当前目录中的所有文件。即,最近修改的文件是第一个,每行一个文件名。
  • sed -e '1,5d'删除前5行,即10个最新文件。我使用此代替tail,因为我永远不会记得我是否需要tail -n +5tail -n +11
  • xargs -d '\n' rm收集每个输入行(没有终止换行符)并将每行作为参数传递给rm