在目录中保留固定数量的文件

在目录中保留固定数量的文件

我们有一个 Linux 目录,每天都会向其中添加文件和目录。

我们希望通过在任何给定时间将列表固定为最近的 50 个文件和目录来控制目录中的文件和子目录列表。

我们怎样编写脚本来实现这个目标?

答案1

使用 GNUfindsort,这将从当前目录中获取 50 个最新的文件及其时间戳:

find . -mindepth 1 -maxdepth 1 -printf '%T@ %p\n' | sort -n | tail -n 50

将这些输入到管道中while read以获取每个文件名:

find . -mindepth 1 -maxdepth 1 -printf '%T@ %p\n' |
sort -n | tail -n 50 |
while read -r ts file; do echo rm -rf -- "$file"; done

这里,printf输出一个可排序的时间戳,数字sort将使用它。我们获取最旧的 50 个文件或目录,并逐个删除它们。删除echo脚本中的以实际执行命令。

请注意,如果您的文件/目录名称中包含换行符,则此方法无效。这种情况并不常见,但请仔细检查。由于的性质read,如果有前导或尾随空格,该方法也将不起作用。

欲了解更多想法,请参阅:BashFAQ/003 – 如何在目录中找到最新(最新、最早、最旧)的文件?

答案2

如果您只需要查看文件夹中的目录(而不是子目录),则执行脚本:

#!/bin/bash
l=$(ls |wc -l)
n=$[$l-50]
rm -rf `ls -1t|tail -$n`

相关内容