查找命令+根据目录时间戳删除较旧的目录

查找命令+根据目录时间戳删除较旧的目录

我想删除超过 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 命令应该不可能更改时间。

相关内容