我正在尝试编写一个shell脚本,该脚本根据目录名称而不是上次修改时间来删除目录及其内容。
我在/tmp/
位置
2015-05-25
2015-05-26
2015-05-27
2015-05-28
2015-05-29
2015-05-30
2015-05-31
现在我要删除2015-05-29
之前的所有目录。所有目录的上次修改日期都相同。
任何人都可以建议吗?
答案 0 :(得分:2)
直接但不灵活的方式(在bash中)是:
rm -rf 2015-05-{25..29}
更灵活的方式会涉及一些编码:
ls -d ./2015-* | sort | sed '/2015-06-02/,$d' | xargs rm -r
答案 1 :(得分:0)
一个简单的解决方案是:
rm -r /tmp/2015-05-2?
如果您想保留2个文件夹,请尝试:
ls -d ./2015-* | sort | head -n -2 | xargs echo
将-2
替换为要保留的负数文件夹。当输出看起来正确时,将echo
替换为rm -r
。
答案 2 :(得分:0)
这个问题的目的是找到名称表示时间戳的目录。因此,我建议计算这些时间戳,以决定是否删除:
ref=$(date --date 2015-05-29 +%s)
for d in ????-??-??; do [[ $(date --date "$d" +%s) -le $ref ]] && rm -rf "$d"; done
ref
是参考日期,其他目录的名称将与此进行比较。