Linux 使用shell或bash脚本基于目录名删除多个目录的脚本

Linux 使用shell或bash脚本基于目录名删除多个目录的脚本,linux,bash,shell,scripting,delete-file,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。所有目录的上次修改日期相同 有谁能提出建议吗?一种简单但不灵活的方法(在bash中)是: 更灵活的方法包括一些编码: ls -d ./2015-* | sort | sed '/2

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


有谁能提出建议吗?

一种简单但不灵活的方法(在bash中)是:

更灵活的方法包括一些编码:

 ls -d ./2015-* | sort | sed '/2015-06-02/,$d' | xargs rm -r
  • 按顺序排序所有目录都遵循名称模式-*
  • 使用“sed”删除2015-06-02(含)之后的所有文件
  • 使用“xargs”删除其余的
  • 一个简单的解决方案是:

    rm -r /tmp/2015-05-2?
    
    如果要保留2个文件夹,请尝试:

    ls -d ./2015-* | sort | head -n -2 | xargs echo
    

    -2
    替换为要保留的文件夹的负数。当输出看起来正确时,将
    echo
    替换为
    rm-r

    此问题的目的是查找名称指示时间戳的目录。因此,我建议计算这些时间戳以决定是否删除:

    ref=$(date --date 2015-05-29 +%s)
    for d in ????-??-??; do [[ $(date --date "$d" +%s) -le $ref ]] && rm -rf "$d"; done
    

    ref
    是参考日期,其他目录的名称与此目录进行比较。

    rm-rf/tmp/2015-{{01..04}-*,05-{01..29}
    ?从2015年1月1日到2015年5月29日删除。@anishsane*不会在括号中展开,是吗?它会:
    touch 2015-{{01..04}-1,test};ls 2015-{{01..04}-*,test}
    ref=$(date --date 2015-05-29 +%s)
    for d in ????-??-??; do [[ $(date --date "$d" +%s) -le $ref ]] && rm -rf "$d"; done