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: あさだ たくや