我们有一个 Linux 目录,每天都会向其中添加文件和目录。
我们希望通过在任何给定时间将列表固定为最近的 50 个文件和目录来控制目录中的文件和子目录列表。
我们怎样编写脚本来实现这个目标?
答案1
使用 GNUfind
和sort
,这将从当前目录中获取 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`