Answers:
您可以使用该-path
选项来查找并将其与-not
运算符组合。
find . ! -path "*/test/*" -type f -name "*.js" ! -name "*-min-*" ! -name "*console*"
请注意两件事
-path
必须作为第一个论点-path test
永远不会匹配任何文件顺便说一句,我不确定为什么要使用括号,这没什么区别。它仅用于优先级,用于诸如之类的构造! \( -name '*bla*' -name '*foo*' \)
(即,找不到同时具有bla
和的事物foo
)。
进一步完善:无需使用bash循环,您只需
find . ... -exec cat {} \; -exec echo \;
...是...的其他参数find
。
find / -path ./test -prune -o ...
重命名./test
以适合测试目录的位置。
您可以尝试使用grep这样的文件(此处的文件夹名为test_folder):
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "/path/to/test_folder/" | while read line
或者您的查找返回相对路径:
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "./relative_path/to/test_folder/" | while read line
或者如果您想要所有具有相同名称但路径不同的文件夹
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "/test_folder/" | while read line
最好的祝福,
扩大我认为@CharlesClavadetscher
他的答案的意义。如果省略路径,-not -path ...
find将继续沿路径下降。相反,使用-prune
将阻止它进一步下降到省略的路径,从而使其更快。所以你可以做类似的事情
find . -path '*test/*' -prune -o -type f -name "*.js" ! -name "*-min*" ! -name "*console*" -print
我在搜索文件时使用“不是全名”。 -name测试实际的文件名,但是-wholename测试完整的路径。因此,在上述问题中添加了测试忽略项:
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) ! -wholename "*test*"