linux命令如何匹配多层文件夹路径?

需求:想要匹配文件夹A(包括无限递归子目录)下面所有的JS文件,但不包括某个名为node_modules子孙目录下的js文件。
目前的做法就是用nodeJS文件夹层层遍历,判断目录文件夹名称。

感觉应该用一个linux命令就可以实现,但是没写出来。。

请问各路大神该怎么写?

阅读 5.6k
2 个回答
find -name '*.js' -not -path '*/node_modules/*'

匹配多个文件:

find \( -name '*.js' -o -name '*.vue' -o -name '*.jsx' \) -not -path '*/node_modules/*'

当然你也可以用正则表达式匹配这么多种后缀:

find -regextype posix-extended -regex '.*\.(js|vue|jsx)$' -not -path '*/node_modules/*'

find默认的是BRE正则,由于这个表达式使用了|选择结构,这个是BRE不支持的,必须使用ERE兼容的正则。所以必须指定regextype为posix扩展正则才能支持这个正则查询

find /A | perl -nle 'print if /^(((?!\/node_modules\/).)*\/((?!\/).)*?\.js)$/'
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题