詳細

詳細

次のディレクトリツリーがあるとします。

.
├── 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
% 

おすすめ記事