我想删除超过 180 天的目录
例如超过 180 天的目录:
drwxr-xr-x 2 root root 4096 Oct 1 2009 nis
drwxr-xr-x 3 root root 4096 Nov 4 2012 pkgs
我使用这个命令:
find /var/tmp -depth -mindepth 1 -type d -ctime +180 -exec rm -rf {} \;
运行 find 命令后,我发现旧目录仍然存在
请告知我的查找命令有什么问题?
[root@vm1 /var/tmp]# ls -ltr
total 20
drwxr-xr-x 2 root root 4096 Oct 1 2009 nis
drwxr-xr-x 3 root root 4096 Nov 4 2012 pkgs
drwxr-x--- 2 root root 4096 Dec 3 08:24 1
drwxr-x--- 2 root root 4096 Dec 3 08:41 2
drwxr-x--- 2 root root 4096 Dec 3 08:41 3
[root@vm1 /var/tmp]# find /var/tmp -depth -mindepth 1 -type d -ctime +180 -exec rm -rf {} \;
[root@vm1 /var/tmp]# ls -ltr
total 20
drwxr-xr-x 2 root root 4096 Oct 1 2009 nis
drwxr-xr-x 3 root root 4096 Nov 4 2012 pkgs
drwxr-x--- 2 root root 4096 Dec 3 08:24 1
drwxr-x--- 2 root root 4096 Dec 3 08:41 2
drwxr-x--- 2 root root 4096 Dec 3 08:41 3
我也尝试了这个(但不删除旧目录)-mtime 仅将旧目录的日期更改为当前日期
find /var/tmp -depth -mindepth 1 -type d -mtime +180 -exec rm -rf {} \;
答案1
ctime、mtime 和 atime 的行为有所不同(例如这里)
ctime 检查 inode 修改时间(例如,如果你将旧文件复制到新目录或磁盘(这不会改变 mtime),则修改时间会发生变化)
mtime 检查文件修改时间(例如,将文件复制到另一个位置或从档案中解压文件时不会更新)
atime 检查访问时间
我认为 ctime 和 mtime 会因您的目录结构而有所不同。 (并且 ls -ltr 显示 mtime,而不是 ctime。)
您的第二次尝试(使用 mtime)不应该改变目录的 mtime(对于 atime 来说,这是意料之中的行为),事实上,对于我来说,此命令可以完成您描述的任务。即使在您缺少任何子目录的写入权限的情况下,此操作也不会失败(因为您对顶层具有写入权限);如果磁盘以只读方式安装,rm 当然会失败,但在这种情况下,此 find 命令应该不可能更改时间。