我发现如下内容:
rm -f crush-all.js
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | while read line
do
cat "$line" >> crush-all.js
echo >> crush-all.js
done
我想在查找中添加以排除名为“test”的目录,但我似乎无法弄清楚如何以某种方式添加“-type d”。我该怎么做?
谢谢!
答案1
您可以使用-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
。
答案2
find / -path ./test -prune -o ...
重命名./test
以适合您的测试目录的位置。
答案3
扩展一下我认为@CharlesClavadetscher
他回答的目的。如果你省略了一条路径,-not -path ...
find则将继续沿该路径下降。相反,使用-prune
将阻止它进一步下降到省略的路径中,从而使其更快。因此,你可以执行以下操作
find . -path '*test/*' -prune -o -type f -name "*.js" ! -name "*-min*" ! -name "*console*" -print
答案4
当我仅搜索文件时,我使用“非全名”。 -姓名测试实际的文件名,但是-全名测试完整路径。因此,在上述问题中添加对测试的忽略:
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) ! -wholename "*test*"