linux + 使用 rm -rf 查找命令

linux + 使用 rm -rf 查找命令

为什么以下命令删除了 /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 {} \;

相关内容