bash – Shell globbing排除目录模式
发布时间:2020-12-15 21:39:01 所属栏目:安全 来源:网络整理
导读:忽略可以与 shell globs关联使用的命令,我想完成从glob模式中排除所有目录和子目录中的特定目录模式. 假设我有这个目录结构: +-- a +-- a1 +-- assets +-- a1-1 +-- a1-1.js +-- a1-2 +-- a1-2.js +-- a2 +-- a2.js+-- b +-- b1 +-- b1-2 +-- b1-2-3 +-- as
忽略可以与
shell globs关联使用的命令,我想完成从glob模式中排除所有目录和子目录中的特定目录模式.
假设我有这个目录结构: +-- a +-- a1 +-- assets +-- a1-1 +-- a1-1.js +-- a1-2 +-- a1-2.js +-- a2 +-- a2.js +-- b +-- b1 +-- b1-2 +-- b1-2-3 +-- assets +-- b1-2-3.js +-- b.js +-- c +-- c.js 我想列出所有文件路径中没有资产的js文件. 到目前为止我尝试过的: $shopt -s globstar extglob $ls ./**/!(assets)/**/*.js 上述模式不仅实现了它的目标,甚至还显示了重复的输出.我知道我可以这样做: $ls ./**/*.js | grep -v "assets" 或者任何其他可以管道的命令,我只想要一个纯粹的shell glob模式. 预期产出: a/a2/a2.js b/b.js c/c.js 解决方法
迈克尔的回答是正确的. **匹配太多(贪婪匹配),包括资产.
所以,用这棵树: . |-- a | |-- a1 | | +-- assets | | |-- a1-1 | | | +-- a1-1.js | | +-- a1-2 | | +-- a1-2.js | +-- a2 | +-- a2.js |-- assets | +-- xyz.js |-- b | |-- b1 | | +-- b1-2 | | +-- b1-2-3 | | |-- assets | | | +-- b1-2-3.js | | +-- test | | |-- test2 | | | +-- test3 | | | +-- test4 | | | +-- test4.js | | +-- test.js | +-- b.js |-- c | +-- c.js +-- x.js .js文件是: $find . -name '*.js' ./x.js ./assets/xyz.js ./a/a2/a2.js ./a/a1/assets/a1-2/a1-2.js ./a/a1/assets/a1-1/a1-1.js ./c/c.js ./b/b.js ./b/b1/b1-2/b1-2-3/test/test2/test3/test4/test4.js ./b/b1/b1-2/b1-2-3/test/test.js ./b/b1/b1-2/b1-2-3/assets/b1-2-3.js 有一个bash变量 所以,这将工作: $GLOBIGNORE='**/assets/**:assets/**:**/assets' $ls -1 **/*.js a/a2/a2.js b/b1/b1-2/b1-2-3/test/test2/test3/test4/test4.js b/b1/b1-2/b1-2-3/test/test.js b/b.js c/c.js x.js (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |