无法删除超过三天的目录

时间:2016-04-12 16:29:45

标签: linux bash unix server rm

我需要删除超过三天的所有子目录。下面的代码应该可以工作,但它不是......

for i in `find ~/web/smsng/ -maxdepth 1 -type d -mtime +3 -print`; do echo -e "Deleting directory $i";rm -rf $i; done

目录的完整ls-l列表:

(uiserver):u83749873:~/models/ndfd > ls -l
total 1536
drwx---r-x 2 u83749873 ftpusers 12288 Apr  8 12:41 2016040816
drwx---r-x 2 u83749873 ftpusers 12288 Apr  8 13:41 2016040817
drwx---r-x 2 u83749873 ftpusers 12288 Apr  8 14:40 2016040818
drwx---r-x 2 u83749873 ftpusers 12288 Apr  8 15:41 2016040819
drwx---r-x 2 u83749873 ftpusers 12288 Apr  9 00:41 2016040904
drwx---r-x 2 u83749873 ftpusers 12288 Apr  9 01:41 2016040905
drwx---r-x 2 u83749873 ftpusers 12288 Apr  9 02:41 2016040906
drwx---r-x 2 u83749873 ftpusers 12288 Apr  10 03:41 2016040907
drwx---r-x 2 u83749873 ftpusers 12288 Apr  10 04:41 2016040907
drwx---r-x 2 u83749873 ftpusers 12288 Apr  11 07:41 2016040907

1 个答案:

答案 0 :(得分:2)

-mtime +3更改为-mtime +2

for i in `find ~/web/smsng/ -maxdepth 1 -type d -mtime +2 -print`; do
    echo -e "Deleting directory $i"
    rm -rf $i
done

根据find(1)手册页:

  

-mtime n

     

文件是最后一次访问n * 24小时前。当找到上次访问文件24小时前的数据时,会忽略任何小数部分,因此为了匹配-atime +1,必须至少 2 天前访问一个文件

其他改进

您可以对脚本进行一些改进,以提高处理任何可能的文件名的能力。

目前,如果出现以下情况,您的脚本将无效:

  • 任何目录中都有空格,制表符或换行符
  • $i变量以连字符(-
  • 开头

如果您编写脚本,则可以解决这两个问题:

find ~/web/smsng/ \
    -maxdepth 1 -type d -mtime +2 \
    -exec echo 'Deleting directory {}' \; \
    -exec rm -rf -- {} \;

因为它永远不会被shell解释为参数列表,所以拆分空白永远不会发生。因为它使用选项终止rm传递给--,所以文件名可以以连字符开头,而不会被解释为rm的标志。