假设我有以下目录树:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 11\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 111\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 112\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1121\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 113\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 11a\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 11a1\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1a1\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1a2\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1aa1.png\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 2a1\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a1a\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a1a.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a2a\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 aa\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 -aa\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 aa.gif\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 aa.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 aa.png\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 aa.tiff\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a.exe\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a.gif\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a.html\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a.png\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a.tiff\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 b2\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 b2a\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ba.gif\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ba.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ba.png\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ba.tiff\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 b.html\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cb1.png\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 d.gif\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 sub1\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 d.gif\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 sub2\n
Run Code Online (Sandbox Code Playgroud)\n\n所以,如果我想匹配 . ($PWD) 但是带有“.jpg”扩展名的文件,我执行以下操作:
\n\nls !(*.jpg)\n
Run Code Online (Sandbox Code Playgroud)\n\n但它输出:
\n\n11 1121 11a1 1aa1.png a1a aa.gif a.exe a.png b2a ba.tiff d.gif\n111 113 1a1 2a1 a2a aa.png a.gif a.tiff ba.gif b.html .gif\n112 11a 1a2 a. aa aa.tiff a.html b2 ba.png cb1.png\n\nsub1:\n. .. d.gif sub2\n
Run Code Online (Sandbox Code Playgroud)\n\n我想排除 sub1 及其所有内容(甚至目录),即:
\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\nsub1:\n. .. d.gif sub2\n
我可以排除使用:
\n\nGLOBIGNORE=\'sub1\'
在 ls 之前,但是如果我有更多具有不同名称的目录会发生什么?
有没有办法做到这一点?
\n一定要有壳bash
吗?通过 ZSH 和EXTENDED_GLOB
set,我们可以(.)
将 glob 表达式限定()
为纯文件.
:
$ PS1='%% ' zsh -f
% setopt EXTENDED_GLOB
% mkdir foo && cd foo
% touch nope.jpg
% mkdir sub1
% touch asdf
% print ^*.jpg
asdf sub1
% print ^*.jpg(.)
asdf
%
Run Code Online (Sandbox Code Playgroud)