假设我有以下目录树:
\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\nRun Code Online (Sandbox Code Playgroud)\n\n所以,如果我想匹配 . ($PWD) 但是带有“.jpg”扩展名的文件,我执行以下操作:
\n\nls !(*.jpg)\nRun 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\nRun 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_GLOBset,我们可以(.)将 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)