glob

ReferenceTOPKeywords

コマンド名

glob - パターンにマッチするファイルの名前を返します。

構文

glob ?switches? pattern ?pattern ...?

解説

このコマンドはcshシェルと類似した方式でファイル名を"globbing"します。これは名前がpattern引数のいずれかとマッチしたファイルのリストを返します。

globの最初の引数が-で始まっている場合、スイッチとして扱われます。以下のスイッチが現在サポートされています。

-directory directory
-join
-nocomplain
-path pathPrefix
-tails
-types typeList
- -
?
*
[chars]
\x
{a,b,...}
-directory directory
与えられたdirectoryから始まって、与えられたパターンにマッチするファイルを検索します。これは明確に該当文字を引用する事を避けて、名前がglobの文字を含むディレクトリの検索を可能にします。このオプションは-path と共に使えません。-path は名前がglobの文字を含む完全なファイルパスを検索するために使われます。
 
-join
残っている全てのパターン引数を、ディレクトリ区切りで結合することによって得られたパターンを唯一の引数として扱います。
 
-nocomplain
エラーを起こすことなく、空のリストが返すことを認めます。 このスイッチがない場合、結果 のリストが空の場合にエラーが返されます。
 
-path pathPrefix
与えられたpathPrefix を使って、名前の残り部分が与えられたパターンにマッチするファイルを検索します。名前がglob‐の文字を含んでも、あるファイル (directoryと参照して ) と似ている名前を持つファイルを検索します。 このオプションは-directoryと共に使えません。 例えば、拡張以外の$pathと同じルート名を持つ全てのファイルを検索するには、glob -path [file rootname $path] .* を使うべきです。このコマンドは $pathが多数のglob‐の文字を含む場合でも、動作します。
 
-tails
検索した各ファイルのあらゆる -directory または-pathのパス仕様に指定された最後のディレクトリの後ろに続く部分のみを返します。 従って、glob -tails -directory $dir *set pwd [pwd ]; cd $dir; glob *; cd $pwd と同等です。-path仕様に対して返された名前は最後のパス区分(セグメント)を含みます。従って、glob -tails -path [file rootname~/foo.tex ] .*foo.aux foo.bib foo.tex等のようなパスを返します。
 
-types typeList
typeListにマッチするファイルやディレクトリをリストします。リストの項目が2つの形式を持ちます。一番目の形式はUnixのfindコマンドの-typeオプションと同じです。 b ( ブロックの特別なファイル ) 、c (文字の特別なファイル ) 、d ( ディレクトリ ) 、f ( 普通のファイル ) 、l (符号的リンク ) 、p ( 指定されたパイプ ) 、s ( ソケット )です。複数のタイプはリストにおいて指定されますglobは与えられたタイプのうちの少なくとも1つにマッチする全てのファイルを返します。

二番目の形式は、与えられた全てのタイプがマッチしなければならないタイプを指定します。これらはファイル許可としてのr, w. x、ttと特別な許可ケースとしてreadonly, hiddenを指しています。 Macintosh 上では、MacOSタイプとcreator もサポートされます。そして、長さ4文字のあらゆる項目はMacOSタイプ ( 例えば、 TEXT ) とみなされます。形式{macintosh type XXXX } 、又は{macintosh creator  XXXX} をしている項目はそれぞれタイプとcreatorにマッチします。 認識されないタイプや多重MacOSタイプ/creatorの仕様はエラーを起こします。

2つの形式は混在できます。従って{ d f r w }は、全ての普通ファイル、または読書き両方の許可を持つディレクトリを検索します。下記は同等です。

glob -type d *
glob */

但し、1行目のものは、末尾の”/”を返しません。かつプラットフォーム独立です。

--
スイッチの終了を示します。このスイッチの後の引数は-で始まっていてもpatternとして扱われます。

pattern 引数は以下の特別な文字を含むことができます。

?
あらゆる単一の文字にマッチします。
*
あらゆる0個以上の文字の並びにマッチします。
[chars]
chars内の単独の文字のいずれかにマッチします。 charsが形式 a-bの並びを含んでいる場合、aとbの間(2つの文字も含まれる)の文字のいずれかにマッチします。
\x
文字xにマッチします。
{a,b, ...}
文字列a、b、などのうちの何れかにマッチします。

cshと同様、Unixではファイル名の始まりあるいは"/"の直後の "." は、"-type hidden"フラグ(ファイル名の始まりの"."はこのファイルが隠されることを示します)で与えれない限り、明示的に、或は"{}"構成子でマッチしなければなりません。他のプラットホームで、明示的にマッチしなければならない特別 なディレクトリ"."と ".."を除いて、ファイル名の始まりの"." は、全て他のものと区別して扱われます( これが再帰的にディレクトリ階層にたどる”glob -join * * * *”のような再帰的パターンを回避するためです ) 。更に、すべて の"/"文字は明示的にマッチしなければなりません。

patternの最初の文字が"~"の場合、"~"の後ろの文字列が名前としてのユーザーのホームディレクトリを参照します。 "~"が "/"の直前にある場合、HOME環境変数の値が使われます。

globコマンドは2つの点でcshのglobbingと異なります。一つは、結果のリストをソートしない(リストがソートしたい場合は、lsort コマンドを使う)。もう一つは、globは実際に存在しているファイルの名前だけを返します。cshではパターンが?*[]構成子を含んでいなければ、存在の確認は行われません。

移植性の問題

ネットワークとネイティブ両方の方式の名前が認められる他の Tcl コマンドと異なり(どのようにネイティブとネットワークの名前が指定されるかの詳細は filenameマニュアルエントリを参照してください)、 globコマンドはネイティブな名前だけを受け入れます。

Windows

Windows UNC名に対して、パスのservernameとsharenameコンポーネントは?*[]構成子を含まれません。Windows NTで、pattern が”~username@domain”形式の場合、これはアカウント情報が指定されたNTドメインサーバにあるユーザーのホームディレクトリを参照します。他の場合は、ユーザーアカウント情報はローカルコンピュータから取得されます。Windows 95と98上では、globは”... /”や”.... /”のようなパターンを受け入れ、連続して親ディレクトリへたどります。globコマンドでは、バックスラッシュ文字が特別 な意味を持っているので、Windows 式のパス区切りを含むglobパターンに特別な注意が必要です。パターンC:\\foo\\*C:\foo\* と解釈され、\f が単一の文字f にマッチされます。また\* はワイルドカード文字と解釈されるのではなく、ただ文字* にマッチします。この問題を解決策の1つとしては、Unix式のフォワードスラッシュをパス区切りとして使うことです。Windows 式のパスはコマンドfile join $path  (または、Tcl 8.4のfile normalize $path )を使ってUnix式のパスに変換できます。
Macintosh
オプション-directory-join-pathを使う場合、globは全体のパターンに対するディレクトリ区切りが標準的な”:”と仮定します。これらのオプションを使っていない場合、globはそのパターンが”:”を含まない限り、”/”を使って各パターン引数を検査します。

参照

file

キーワード

exist, file, glob, pattern


Copyright © 1993 The Regents of the University of California. Copyright © 1994-1996 Sun Microsystems, Inc. Copyright © 1995-1997 Roger E. Critchlow Jr.