下面保留最新的10个目录并删除其余的。与 bash 配合良好。
TCSH 相当于下面的 bash 吗?
keep = 10
rm -r $(ls -dt */ | tail -n +$((keep+1)))
答案1
set keep = 10
@ tail = $keep + 1
rm -rf -- "`ls -dt -- */ | tail -n +$tail`"
会接近你想要的,只有当目录(或目录的符号链接)的名称包含换行符时才会失败,但至少比你的那个非常有缺陷的 bash 代码可靠得多。
正如 Kusalananda 在评论中所说,zsh 将是一个更合适的 shell:
keep=10
rm -rf -- *(/om[keep+1,-1])
在任何情况下,目录的修改时间仅反映最后一次在其中(而不是在子目录中)添加、删除或重命名条目的时间,因此它不是其中数据年龄的度量,通常不应用作删除的依据。