Subject: How do I construct a ... matches all files except "." and ".." ?
Date: Thu Mar 18 17:16:55 EST 1993
2.11) "." と ".." 以外の全てのファイルにマッチする、シェルのファイル名展開
パターンを作りたいのですが。
こうすれば、簡単に分かるでしょう。
- *
- "." 以外で始まる全てのファイルにマッチします。
- .*
- "." で始まる全てのファイルにマッチします。しかしこれには特別に
登録されている "." と ".." が含まれてしまいます。通常これらは
必要ないはずです。
- .[!.]*
- (新しいシェルだけです。"!" の代わりに "^" を使うシェルもあ
ります。POSIX のシェルは間違いなく "!" を受け付けますが、更に
"^" も受け付けるかもしれません。互換性のあるアプリケーションな
ら、"[" の直後のクォートされていない "^"は使用しないでしょう)。
"." で始まり、"." 以外の文字が続く全てのファイルにマッチします。
残念ながらこれは "..foo" にマッチするのは失敗します。
- .??*
- "." で始まり、少なくとも3文字の長さはあるファイルにマッチ
します。これはきちんと "." と ".." は避けますが、".a" もまた避
けてしまいます。
というわけで、確実に "." と ".." 以外の全てのファイルにマッチさせるた
めには、3つのパターンを使わなければなりません(もし ".a" のようなファイ
ルを持っていなければ、最初のは省略できます)。
.[!.]* .??* *
代わりに、一つか二つの外部プログラムとバッククォートによるコマンド置換
を使用することができます。これはかなり良い方法です。
`ls -a | sed -e '/^¥.$/d' -e '/^¥.¥.$/d'`
(又は 'ls -A' を使う UNIX のバージョンもある)
しかしこれでさえ、ファイル名に改行、IFS 文字、ワイルドカードがあると、
うまく動作しません。
UNIX FAQ LIST / Copyright(c)1994,Ted Timar / tmatimar@isgtec.com
Maintainer:
あさだ たくや