我用它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
。