如果目录中存在超过 N 个文件,如何编写 bash 脚本来删除目录中最旧的文件?

如果目录中存在超过 N 个文件,如何编写 bash 脚本来删除目录中最旧的文件?

想知道如何编写一个脚本:

计算目录中的文件数。

如果该数字大于指定数字 N,则删除目录中最旧的文件。

为了获得额外的善意感觉:仅在计数/删除中包含 .zip 文件。

答案1

例如,仅当文件夹中的文件超过 50 个时才执行操作:

shopt -s dotglob nullglob
for file in *; do
    [[ -f $file ]] && files+=( "$file" )
done
if (( ${#files[@]} > 50 )); then
    IFS= read -r -d $'\0' line < <(find . -maxdepth 1 -type f -printf '%T@ %p\0' 2>/dev/null | sort -z -n)
    rm "${line#* }"
fi

答案2

N=50
[[ $( ls | wc -l ) -gt $N ]] && ls -tr | tail -n1 | tr \\n \\0 | xargs -0 echo rm

几乎没有经过测试,但我认为这已经很接近了。如果您对文本输出感到满意,可以删除echo并将其设置为活动状态。

  • ls列出文件
  • wc数一下他们
  • [[ ... -gt ... ]]如果
  • &&然后
  • ls -tr以反向年龄列出文件
  • tail -n1仅显示最后一行(1根据需要替换)
  • tr \\n \\0在文件名之间设置\0分隔符(这里只有一个)
  • xargs -0 echo rm --\0将找到的每个参数(由 s 分隔)附加到echo rm --
  • echo rm --让您有机会检查结果是否真的是您想要的
  • rm --删除文件(放在--文件名之前以处理以 开头的文件名-

相关内容