Linux 使用shell或bash脚本基于目录名删除多个目录的脚本
我正在尝试编写一个shell脚本,它根据目录名而不是上次修改的时间删除目录及其内容 我在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
/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
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