可能重复:
删除bash中除最新X文件之外的所有文件
我有一个脚本来每天创建增量备份,我需要删除所有备份,但最后5.
例如,我有这个文件夹:
drwxr-xr-x 4 root root 4096 Oct 29 01:10 2010-10-29 drwxr-xr-x 4 root root 4096 Oct 30 01:10 2010-10-30 drwxr-xr-x 4 root root 4096 Oct 31 01:10 2010-10-31 drwxr-xr-x 4 root root 4096 Nov 1 01:10 2010-11-01 drwxr-xr-x 4 root root 4096 Nov 2 01:10 2010-11-02 drwxr-xr-x 4 root root 4096 Nov 3 01:10 2010-11-03 drwxr-xr-x 4 root root 4096 Nov 4 01:10 2010-11-04 drwxr-xr-x 4 root root 4096 Nov 5 01:10 2010-11-05 drwxr-xr-x 4 root root 4096 Nov 6 01:10 2010-11-06 drwxr-xr-x 4 root root 4096 Nov 7 01:10 2010-11-07 drwxr-xr-x 4 root root 4096 Nov 8 01:10 2010-11-08
我只需要维护最后5个目录并删除其他目录.执行命令后,我只需要这样:
drwxr-xr-x 4 root root 4096 Nov 4 01:10 2010-11-04 drwxr-xr-x 4 root root 4096 Nov 5 01:10 2010-11-05 drwxr-xr-x 4 root root 4096 Nov 6 01:10 2010-11-06 drwxr-xr-x 4 root root 4096 Nov 7 01:10 2010-11-07 drwxr-xr-x 4 root root 4096 Nov 8 01:10 2010-11-08
我不需要删除前5天,我需要删除除最后5个目录以外的所有目录:)
现在我正在使用:
find /backup/increment -maxdepth 1 -type d -mtime +5 -exec rm -rf {} \;
但我需要改进不是基于时间:)
编辑:这是一个整天进行备份的服务器的示例,但是我需要一个脚本来删除最后5个之前的所有文件夹,因为我的计算机在晚上00:10进行备份,但不是备份完成的所有夜晚,因为我的电脑一直没有工作,我需要总是最后5个备份:)
Mar*_*ner 36
使用该tail命令打印从第n行开始的行(选项-n +N):
rm `ls -t | tail -n +6`
Run Code Online (Sandbox Code Playgroud)
ls -t输出按时间排序的当前目录.tail -n +6从第6行开始.使用反引号进行引用会将管道的结果输入rm命令.
旧解决方案,不正确......
使用head命令打印某些输出的前n行:
rm `ls -t1 | head -n 5`
Run Code Online (Sandbox Code Playgroud)
ls -t输出按时间排序的当前目录.head -n 5获取前一个输出的前五个条目.使用反引号进行引用会将管道的结果输入rm命令.
在申请实时数据之前请先试用:) ...
| 归档时间: |
|
| 查看次数: |
10479 次 |
| 最近记录: |