在linux中查找文件并排除特定目录

Ask*_*ken 18 find

我有一个看起来像这样的发现:

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
Run Code Online (Sandbox Code Playgroud)

我想添加以排除查找中名为“test”的目录,但我似乎无法弄清楚如何以某种方式添加“-type d”。我是怎么做的?

谢谢!

Jan*_*ary 24

您可以使用该-path选项查找并将其与-not运算符组合。

find . ! -path "*/test/*" -type f -name "*.js" ! -name "*-min-*" ! -name "*console*"
Run Code Online (Sandbox Code Playgroud)

请注意两点

  • -path 必须作为第一个参数出现
  • 该模式匹配整个文件名,因此-path test永远不会匹配任何内容

顺便说一句,我不确定您为什么要使用括号,这没什么区别。它仅用于优先级,用于诸如! \( -name '*bla*' -name '*foo*' \)(即,不查找同时具有bla和 的事物foo)的结构。

进一步的改进:不需要使用 bash 循环,你可以简单地做

find . ... -exec cat {} \; -exec echo \;
Run Code Online (Sandbox Code Playgroud)

其中 ... 是 的其他参数find