删除目录中比最近添加的十个文件旧的所有文件

J09*_*991 4 command-line scripts delete

我有一个压缩的 (tar) 备份文件,它会定期添加到目录中。添加的文件具有如下命名约定:

JenkinsBackup_$(date +%Y%m%d-%H%M%S).tar.gz
Run Code Online (Sandbox Code Playgroud)

这导致文件命名为:

jenkinsBackup_20170630-091543.tar.gz
Run Code Online (Sandbox Code Playgroud)

我的目标是选择目录中比最近添加到目录中的十个文件更旧的所有文件,并删除这些文件。本质上是从命令行清理目录。

任何人都可以帮助我完成此操作所需的终端命令吗?我不确定如何选择和删除比最近十个文件更旧的目录中的所有文件。

在此先感谢您的帮助!

Rav*_*ina 6

一种适用于您的文件名的简单方法是使用:

ls -t1 | tail -n +11 | xargs gvfs-rm
Run Code Online (Sandbox Code Playgroud)
  • ls -t1 根据修改时间给我们一个文件列表,最新的文件在前。
  • 使用tail -n +11我们跳过前 10 行并获取其他所有内容
  • 然后我们通过管道将列表xargs gvfs-rm删除。

请注意,gvfs-rm将文件移动到垃圾箱,用于rm永久删除它们。

如果您想使用文件名而不是修改时间,请ls -1r | tail -n +11 | xargs gvfs-rm改用。

find根据文件名决定的类似解决方案:

find -type f | sort -r | tail -n +11 | xargs gvfs-rm
Run Code Online (Sandbox Code Playgroud)

或者

find -type f | sort | head -n -10 | xargs gvfs-rm
Run Code Online (Sandbox Code Playgroud)