使用find搜索*.js文件时,如何排除特定目录?
find . -name '*.js'
使用find搜索*.js文件时,如何排除特定目录?
find . -name '*.js'
当前回答
这是因为find测试模式“*foo*”的文件:
find ! -path "dir1" ! -path "dir2" -name "*foo*"
但如果不使用模式(find不测试文件),它就不起作用。因此find没有使用它以前评估的“true”和“false”布尔值。不使用上述符号的用例示例:
find ! -path "dir1" ! -path "dir2" -type f
没有找到测试!因此,如果您需要查找没有任何模式匹配的文件,请使用-prune。此外,通过使用prune查找总是更快,因为它确实跳过了该目录,而不是匹配它或更好地不匹配它
find dir -not \( -path "dir1" -prune \) -not \( -path "dir2" -prune \) -type f
or:
find dir -not \( -path "dir1" -o -path "dir2" -prune \) -type f
当做
其他回答
使用-prune选项。因此,类似于:
find . -type d -name proc -prune -o -name '*.js'
“-typed-name-proc-prune”只查找要排除的名为proc的目录。“-o”是“OR”运算符。
您可以使用修剪选项来实现这一点。例如:
find ./ -path ./beta/* -prune -o -iname example.com -print
或者反向grep“grep-v”选项:
find -iname example.com | grep -v beta
您可以在Linux find命令exclude directories from search中找到详细的说明和示例。
以下命令有效:
find . -path ./.git -prune -o -print
如果查找有问题,请使用-D树选项查看表达式分析信息。
find -D tree . -path ./.git -prune -o -print
或者使用-D all,查看所有执行信息。
find -D all . -path ./.git -prune -o -print
我更喜欢-不是符号。。。它更可读:
find . -name '*.js' -and -not -path directory
您还可以使用正则表达式包含/排除搜索中的某些文件/目录,具体如下:
find . -regextype posix-egrep -regex ".*\.(js|vue|s?css|php|html|json)$" -and -not -regex ".*/(node_modules|vendor)/.*"
这将只提供所有js、vue、css等文件,但不包括node_modules和vendor文件夹中的所有文件。