如何在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