Find 和 rm 命令偶尔不遵守排除列表

Find 和 rm 命令偶尔不遵守排除列表

我正在运行 7 天之前修改的 find 和 rm -rf 目录列表,其中包含在任何情况下都不应删除的目录排除列表。

这是脚本摘录

find [path-to-base-dir] -maxdepth 1 -type d ! -name [dir1] ! -name .snapshot \
! -name . ! -name [dir2] ! -name [dir3] ! -name [dir4] ! -name [dir5] ! -name [dir6] \
! -name [dir7] ! -name [dir8] ! -name [dir9] ! -name [dir10] ! -name [dir11] ! -name [dir12]\
 -mtime +7 -exec rm -rf {} \; -print

这被安排为每日 cron。在大多数情况下,这工作得很好。但在某些日子里,它会忽略排除列表并删除所有目录。怎么会发生这种事呢?条件列表非常长,因此任何类型的延迟都可能导致 find 命令忽略 !name 条件..?

答案1

寻找到基目录的路径-最大深度1 \
     -d 型! -姓名一堆异常\
     -mtime +7 -exec rm -rf {} \; -打印

您没有包含path-to-base-dirbunch-of-exceptions. (您包含了,但只有在完全匹配的.情况下才会匹配)目录可能失败的唯一条件是。如果该目录在过去 7 天内没有被修改,则会被删除。path-to-base-dir.path-to-base-dir-mtime +7

由于您find-mindepth-maxdepth,请使用-mindepth 1排除起始目录。

答案2

将这些[dir1]字符串放在引号中,否则 shell 会因为括号而尝试扩展它们,根据当前工作目录的内容,这可能会成功,也可能不会成功。

相关内容