想知道如何编写一个脚本:
计算目录中的文件数。
如果该数字大于指定数字 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 --
删除文件(放在--
文件名之前以处理以 开头的文件名-
)