如何在bash中删除除最新的五个创建目录之外的所有目录(按日期创建时间)?
构建脚本正在使用它,我们希望清除旧版本。感谢。
编辑:修改日期的时间也没问题。
答案 0 :(得分:2)
获取文件创建时间并非易事。请参阅此处以供参考:https://unix.stackexchange.com/questions/20460/how-do-i-do-a-ls-and-then-sort-the-results-by-date-created
但如果你很高兴到最后修改时间(这应该没问题呢?)那么像这样的单行应该做的事情。
ls -dt */ | tail -n +6 | xargs rmdir
ls -d */
列表目录-t
按顺序列出tail -n +6
打印除最后五行之外的所有行xargs rmdir
在每个dirs上调用rm -r
(或者如果它们非空,则可以使用rm -r
)答案 1 :(得分:0)
可以用ls完成,但解析ls输出不安全。
由于没有内置shell来检索文件时间,所以使用perl。
perl -e '
@A = sort {(stat($a))[9]<=>(stat($b))[9]} <*/>;
rmdir for splice (@A,0,-10)
'
测试
mkdir tmp && cd tmp
for d in {A..Z}; do mkdir "$d"; done
ls
perl -e '
@A = sort {(stat($a))[9]<=>(stat($b))[9]} <*/>;
rmdir for splice (@A,0,-10)
'
ls
编辑:splice(@A,0,-10)
可以更改为@A[0..$#A-10]
,也许更容易阅读。获取除最后10个之外的所有元素。