如何在find中排除目录。 命令

我试图为所有JavaScript文件运行find命令,但是如何排除特定目录?

这是我们使用的查找代码。

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

例如,如果您想排除misc目录,只需将-path ./misc -prune -o添加到find命令中,请使用prune开关:

find . -path ./misc -prune -o -name '*.txt' -print

以下是多个目录的示例:

find . -type d ( -path dir1 -o -path dir2 -o -path dir3 ) -prune -o -print

在这里,我们排除DIR1,DIR2和DIR3,因为在find表达它是一个动作,作用于标准-path dir1 -o -path dir2 -o -path dir3 (如果DIR1或DIR2或DIR3),相与type -d 。 进一步的行动是-o print ,只是打印。


如果-prune不适合你,这将会:

find -name "*.js" -not -path "./directory/*"

我发现以下比其他建议的解决方案更容易推理:

find build -not ( -path build/external -prune ) -name *.js

这来自一个实际的用例,我需要在wintersmith生成的一些文件上调用yui-compressor,但是忽略了需要按原样发送的其他文件。

Inside ()是一个完全匹配build/external的表达式,并且在成功时避免遍历下面的任何东西。 然后将它分组为带有转义括号的单个表达式,并以-not为前缀,这将使find跳过与该表达式匹配的任何内容。

有人可能会问,如果添加-not不会使-prune隐藏的所有其他文件重新出现,并且答案是否定的。 -prune工作方式是,任何一旦到达该目录下的文件都会被永久忽略。

这也很容易扩展以增加额外的排除。 例如:

find build -not ( -path build/external -prune ) -not ( -path build/blog -prune ) -name *.js
链接地址: http://www.djcxy.com/p/2197.html

上一篇: How to exclude a directory in find . command

下一篇: How to symlink a file in Linux?