![查找命令+根据目录时间戳删除较旧的目录](https://linux22.com/image/1432712/%E6%9F%A5%E6%89%BE%E5%91%BD%E4%BB%A4%2B%E6%A0%B9%E6%8D%AE%E7%9B%AE%E5%BD%95%E6%97%B6%E9%97%B4%E6%88%B3%E5%88%A0%E9%99%A4%E8%BE%83%E6%97%A7%E7%9A%84%E7%9B%AE%E5%BD%95.png)
我想删除超过 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 命令应该不可能更改时间。