次のディレクトリツリーがあるとします。
.
├── 11
├── 111
├── 112
├── 1121
├── 113
├── 11a
├── 11a1
├── 1a1
├── 1a2
├── 1aa1.png
├── 2a1
├── a.
├── a1a
├── a1a.jpg
├── a2a
├── aa
├── -aa
├── aa.gif
├── aa.jpg
├── aa.png
├── aa.tiff
├── a.exe
├── a.gif
├── a.html
├── a.jpg
├── a.png
├── a.tiff
├── b2
├── b2a
├── ba.gif
├── ba.jpg
├── ba.png
├── ba.tiff
├── b.html
├── cb1.png
├── d.gif
└── sub1
├── d.gif
└── sub2
したがって、.($PWD) であるが拡張子が ".jpg" のファイルを一致させるには、次のようにします。
ls !(*.jpg)
ただし、次のように出力されます。
11 1121 11a1 1aa1.png a1a aa.gif a.exe a.png b2a ba.tiff d.gif
111 113 1a1 2a1 a2a aa.png a.gif a.tiff ba.gif b.html .gif
112 11a 1a2 a. aa aa.tiff a.html b2 ba.png cb1.png
sub1:
. .. d.gif sub2
sub1とその内容(ディレクトリを含む)の両方を除外したいと思います。つまり:
sub1: . .. d.gif sub2
以下を使用して除外できます。
GLOBIGNORE='sub1'
lsの前に他の名前のディレクトリがある場合はどうなりますか?
これを行う方法はありますか?
ベストアンサー1
シェルでなければなりませんかbash
? ZSHとsetを使用すると、glob式を通常のファイルに制限EXTENDED_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
%