加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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来完成你想要做的事情.

所以,这将工作:

$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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读