首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash:删除前缀为x的所有最近的n个文件

Bash:删除前缀为x的所有最近的n个文件
EN

Server Fault用户
提问于 2011-05-27 10:13:01
回答 3查看 3K关注 0票数 1

我有一个备份目录,如下所示:

代码语言:javascript
复制
-rw-r--r--   1 ftpuser ftponly   5610595 May 27 00:01 alpha-114.tar.asc   
-rw-r--r--   1 ftpuser ftponly  50559368 May 27 00:04 beta-211.tar.asc
-rw-r--r--   1 ftpuser ftponly  61320807 May 27 00:06 gamma-387.tar.asc
-rw-r--r--   1 ftpuser ftponly  43125044 May 27 00:07 epsilon-241.tar.asc
-rw-r--r--   1 ftpuser ftponly  1107110560 Apr 26 04:33 zeta-7728.tar.asc
-rw-r--r--   1 ftpuser ftponly  1107136555 Apr 27 00:29 zeta-7729.tar.asc
-rw-r--r--   1 ftpuser ftponly  1107154163 Apr 28 00:29 zeta-7731.tar.asc
-rw-r--r--   1 ftpuser ftponly  1107194763 May  1 00:33 zeta-7734.tar.asc
-rw-r--r--   1 ftpuser ftponly  1107200582 May  2 00:33 zeta-7736.tar.asc
-rw-r--r--   1 ftpuser ftponly  1107203436 May  4 00:32 zeta-7737.tar.asc
-rw-r--r--   1 ftpuser ftponly  1107250397 May  7 00:33 zeta-7739.tar.asc
-rw-r--r--   1 ftpuser ftponly  1107269251 May  8 00:26 zeta-7741.tar.asc
-rw-r--r--   1 ftpuser ftponly  1107917088 May  9 00:32 zeta-7747.tar.asc
-rw-r--r--   1 ftpuser ftponly  1107914021 May 10 00:22 zeta-7748.tar.asc
-rw-r--r--   1 ftpuser ftponly  1113095971 May 11 00:32 zeta-7751.tar.asc
-rw-r--r--   1 ftpuser ftponly  1114420811 May 12 00:32 zeta-7756.tar.asc
-rw-r--r--   1 ftpuser ftponly  1114433146 May 13 00:31 zeta-7757.tar.asc
-rw-r--r--   1 ftpuser ftponly  1114437345 May 14 00:32 zeta-7758.tar.asc
-rw-r--r--   1 ftpuser ftponly  1114437862 May 16 00:29 zeta-7762.tar.asc
-rw-r--r--   1 ftpuser ftponly  1115062371 May 17 00:29 zeta-7778.tar.asc
-rw-r--r--   1 ftpuser ftponly  1115068367 May 18 00:30 zeta-7781.tar.asc
-rw-r--r--   1 ftpuser ftponly  1115067272 May 19 00:24 zeta-7782.tar.asc
-rw-r--r--   1 ftpuser ftponly  1115077719 May 20 00:26 zeta-7784.tar.asc
-rw-r--r--   1 ftpuser ftponly  1115080120 May 22 00:25 zeta-7785.tar.asc
-rw-r--r--   1 ftpuser ftponly  1115076554 May 23 00:33 zeta-7786.tar.asc
-rw-r--r--   1 ftpuser ftponly  1115877146 May 24 00:26 zeta-7789.tar.asc
-rw-r--r--   1 ftpuser ftponly  1115967469 May 27 00:53 zeta-7795.tar.asc

除了最近的3个文件前缀外,我想删除所有文件前缀,因此在本例中,除了最后三个文件之外,所有的zeta-*.tar.asc文件都要删除。我有一种复杂的perl脚本来完成这个任务,但是我希望能够使用bash完成它。

花哨的小片段很受欢迎!

EN

回答 3

Server Fault用户

回答已采纳

发布于 2011-05-27 11:02:54

这应该适用于任意数量的前缀,只要它们遵循前缀名称约定:

for i in `ls | sed 's/-.*//' | uniq`; do ls -t $i-* | awk '{if(NR>3) print}' | xargs rm -f; done

票数 1
EN

Server Fault用户

发布于 2011-05-27 10:55:36

您可以使用tail -n +3为所有用户提供来自ls -1t的最初3行输出。

代码语言:javascript
复制
ls -1t zeta* | tail -n +3 | xargs rm 

这列出了从最新到最老的所有文件在一个单独的列中,然后在最初的3(最新)文件之后处理和输出一个文件列表。

票数 2
EN

Server Fault用户

发布于 2011-05-27 12:40:46

这将删除3天以上的所有文件。你可以改变它。这基本上是查找修改时间小于现在()-3天的文件,并删除它们。

代码语言:javascript
复制
find $PATH  -mtime -3 -type f -exec rm {}

您可以选择定义"-iname“标志,以查找文件名中的特定模式。

代码语言:javascript
复制
-iname suffix*prefix

有关更多选项,请参阅“查找手册”。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/274416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档