以递归方式快速查找和打印文件夹中的所有文件,不包括`node_modules`和`.git中的文件

时间:2015-12-08 09:54:26

标签: shell find

从某个根文件夹

开始考虑以下文件夹结构
/root/
/root/.git
/root/node_modules
/root/A/
/root/A/stuff1/
/root/A/stuff2/
/root/A/node_modules/
/root/B/
/root/A/stuff1/
/root/A/stuff2/
/root/B/node_modules/
...

现在我在/root,我想在其中找到我自己的所有文件。 我有一小部分自己的文件以及node_modules.git 中的大量文件。

正因为如此,遍历node_modules并将其过滤是不可接受的,因为它需要太多时间。我希望命令永远不会进入node_modules.git文件夹

1 个答案:

答案 0 :(得分:0)

仅用于直接从搜索文件夹中排除文件:

find . -not \( -path './.git' -prune \) -not \( -path './node_modules' -prune \) -type f

如果要排除子文件夹中的某些路径,也可以使用*通配符执行此操作。

假设您node_modulesstuff1以及stuff2dist个文件夹中也有lib

find . -not \( -path './.git' -prune \) -not \( -path './node_modules' -prune \) -not \( -path './*/node_modules' -prune \) -not \( -path './*/dist' -prune \)  -not \( -path './*/lib' -prune \) -type f

使用git bash 1.9.5在Windows上测试

但是,当通过-name '*.js'之类的过滤器时,它似乎无法在Windows上正常运行。解决方法可能是不使用-name而是使用grep来管道。

感谢@Daniel C. Sobral