猿问

如何排除查找中的目录。命令

如何排除查找中的目录。命令

我在试着find命令,但是如何排除特定目录?

这是find我们正在使用的代码。

for file in $(find . -name '*.js')do 
  java -jar config/yuicompressor-2.4.2.jar --type js $file -o $filedone


Helenr
浏览 493回答 3
3回答

红颜莎娜

使用-prune切换。例如,如果要排除misc目录只需添加一个-path ./misc -prune -o您的查找命令:find . -path ./misc -prune -o -name '*.txt' -print下面是一个包含多个目录的示例:find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o -print在这里我们不包括迪尔1, 迪尔2和迪尔3,自从.find表达式-它是一种根据标准进行操作的动作。-path dir1 -o -path dir2 -o -path dir3(如果迪尔1或迪尔2或迪尔3)、type -d.进一步的行动是-o print印出来就行了。

大话西游666

如果-prune不适合你,这会:find -name "*.js" -not -path "./directory/*"警告:需要遍历所有不需要的目录。

FFIVE

我发现,与其他建议的解决方案相比,下面的理由更容易解释:find build -not \( -path build/external -prune \) -name \*.js# you can also exclude multiple pathsfind build -not \( -path build/external -prune \) -not \( -path build/blog -prune \) -name \*.js重要说明:之后键入的路径-path必须完全匹配什么find在没有排除的情况下打印。如果这句话让您感到困惑,请确保使用完整的路径。整体命令如下:find/完整/路径/-not \( -path/完整/路径/排除/此-prune .....如果您想要更好的理解,请参见注[1]。内\(和\)是将匹配的表达式。一点儿没错 build/external(见上文重要说明),并将在取得成功时,避免在下面横穿任何东西..然后将其分组为带有转义括号的单个表达式,并以-not这将使find跳过任何与该表达式匹配的内容。有人可能会问,如果添加-not不会将所有其他文件隐藏在-prune重新出现,答案是否定的。路途-prune工作原理是,一旦到达,该目录下的文件就会被永久忽略。这来自于一个实际的用例,在这里,我需要调用由Wintersmith生成的一些文件,但忽略了需要按原样发送的其他文件。注[1]*如果你想排除/tmp/foo/bar然后你跑去找这样的“find /tmp \(...“那么您必须指定-path /tmp/foo/bar..另一方面,如果你跑了,就像这样cd /tmp; find . \(...那么您必须指定-path ./foo/bar.
随时随地看视频慕课网APP
我要回答