我怎么能用 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/*/
的末尾,并且所有目录名称都不要以 .
开头
我的基本 /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/*/
的末尾,并且所有目录名称都不要以 .