如果目录名称与 2012 匹配,则配置 find 甚至不查找目录

如果目录名称与 2012 匹配,则配置 find 甚至不查找目录

我用它find /home/myid/dir-with100directories/ -mmin -5 -not -path "*/2012/*来查找所有文件,除了目录 2012 中的文件,但不知何故它的运行速度非常非常慢。

我的猜测是 find 会查找所有目录,只是不会显示/隐藏 2012 年的结果?我是对的还是错的?

答案1

如果要排除路径,则需要在-path选项中使其正确匹配。该选项要求您编写完全匹配的路径,包括绝对路径前缀,因此仅仅这样做/2012/是不够的。

find /home/myid/dir-with100directories/ -mmin -5 \
-not -path '/home/myid/dir-with100directories/2012/*'

或者:

cd /home/myid/dir-with100directories/
find . -mmin -5 -not -path './2012/*' 

如果您想要排除任何包含该名称的文件夹2012– 使用 GNU find

cd /home/myid/dir-with100directories/
find . -regextype posix-extended -not -regex '.*/2012\(/.*\)?'

或者,要修剪名称为的目录2012

cd /home/myid/dir-with100directories/
find . -type d -and -name '2012' -prune -o -print

上面的操作会打印其他所有内容(参见这里了解更多信息)。


如果你使用 Bash,你可以2012立即跳过目录:

shopt -s extlob
find /home/myid/dir-with100directories/!(2012) -mmin -5

与Zsh的想法相同:

setopt extendedglob
find /home/myid/dir-with100directories/^2012 -mmin -5

答案2

请参阅 find 手册页中的选项-prune,以及选项描述中给出的示例-path

相关内容