Linux 无法删除超过三天的目录

Linux 无法删除超过三天的目录,linux,bash,unix,server,rm,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 ftpus

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

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

-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)手册页:

-时间n

上次访问该文件是n*24小时前。当“查找”计算文件上次访问的24小时周期数时,任何小数部分都将被忽略,因此要匹配-atime+1,文件必须至少在两天前访问过

其他改进 您可以对脚本进行一些改进,以提高处理任何可能的文件名的耐用性

当前,如果出现以下情况,脚本将无法工作:

  • 任何目录中都有空格、制表符或换行符
  • $i
    变量以连字符开头(
    -
如果这样编写脚本,则可以解决这两个问题:

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

因为shell从未将其解释为参数列表,所以不会发生空格拆分。因为它通过终止选项传递给
rm
--
文件名可以以连字符开头,而不会被解释为rm的标志。

为什么不在手册页面中查找
查找
,并注意
exec
选项可以给我们一个
~/web/smsng/
的完整目录列表(使用ls-l)?请记住,当文件名更改时,目录被视为已修改。@EdHeal只要路径名中没有空格或转义字符,此代码就可以正常工作。@AaronPerry我说了给我一个列表。如中所示,列出目录的内容。i、 e.
ls-l~/web/smsng/
。你可以把它放在你的问题正文里。所以,如果我只想要最后三天,我会把
-mtime+3
改为
-mtime+2