我怎么能用 bash 删除除最近的 10 个目录之外的所有目录?

How could I remove all directories except 10 recent with bash?

我的基本 /var/www/.versions 目录中有以下文件夹:

1435773881 Jul  1 21:04
1435774663 Jul  2 21:17
1435774856 Jul  3 21:20
1435775432 Jul  4 21:56

我如何使用 bash 脚本删除除最近的 10 个目录之外的所有目录?

这应该可以解决问题,我相信?

rm -r $(ls -td /var/www/.versions/*/ | tac | head -n-10)

想法:仅列出(ls)按时间排序的目录(-d /var/www/.versions/*/-t(最早的将显示在最后)。

然后,使用 tac 反转输出,使最旧的目录位于顶部。

然后显示所有内容,除了最后 10 行 head-n

的否定参数

请先测试非重要目录 ;-) 您可以将 rm -r 更改为 echo 以查看将删除的内容。

您可以使用 ls 中的 -rt 选项来按相反的时间顺序列出。

rm -r $(ls -trd /var/www/.versions/*/ | head -n -10)

此外,请务必将 / 放在 /var/www/.versions/*/ 的末尾,并且所有目录名称都不要以 .

开头