为什么以下命令删除了 /var 下的 tmp 目录以及如何避免这种情况?
find /var/tmp -type d -ctime -1 -exec rm -rf {} \;
pwd
/var/tmp
[root@linux /var/tmp]# find /var/tmp -type d -ctime -1 -exec rm -rf {} \;
find: /var/tmp: No such file or directory
答案1
找到的第一个目录find /var/tmp
是/var/tmp
.如果您想跳过该命令(并使用 Gnu find
),则可以将命令更改为:
find /var/tmp -depth -mindepth 1 -type d -ctime -1 -exec rm -rf {} \;
或者
find /var/tmp -mindepth 1 -type d -ctime -1 -exec rm -rf {} \; -prune
没有-depth
和-prune
可能会出现错误消息,因为rm -rf
删除子目录 - 可能已经看到了find
。-depth
导致rm -r
首先调用子目录。但由于每个子树运行rm -rf
一次就足够了,您也可以使用 . 停止处理目录内容-prune
。
答案2
使用逻辑非运算符!
or-not
从结果中排除路径 /var/tmp。注意:-not
不符合 POSIX 标准。
find /var/tmp -type d -ctime -1 ! -path /var/tmp -exec rm -rf {} \;
或者
find /var/tmp -type d -ctime -1 -not -path /var/tmp -exec rm -rf {} \;