使用shell或bash脚本根据目录名删除多个目录的脚本

时间:2015-06-01 06:54:45

标签: linux bash shell scripting delete-file

我正在尝试编写一个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之前的所有目录。所有目录的上次修改日期都相同。

任何人都可以建议吗?

3 个答案:

答案 0 :(得分:2)

直接但不灵活的方式(在bash中)是:

rm -rf 2015-05-{25..29}

更灵活的方式会涉及一些编码:

 ls -d ./2015-* | sort | sed '/2015-06-02/,$d' | xargs rm -r
  1. 按类别排序所有目录遵循名称模式2015 - *
  2. 使用' sed'删除(包括)2015-06-02
  3. 之后的所有文件
  4. 使用' xargs'删除其余的

答案 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是参考日期,其他目录的名称将与此进行比较。