tcsh 相当于 bash 命令(删除除 10 个最近修改的目录之外的所有目录)

tcsh 相当于 bash 命令(删除除 10 个最近修改的目录之外的所有目录)

下面保留最新的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])

在任何情况下,目录的修改时间仅反映最后一次在其中(而不是在子目录中)添加、删除或重命名条目的时间,因此它不是其中数据年龄的度量,通常不应用作删除的依据。

相关内容