ディレクトリとは、さまざまな名前で登録された他のファイルを格納するファイルの一種です。ディレクトリはファイルシステムの機能です。
Emacsでは、ディレクトリ内のファイル名をLispリストとして出力したり、lsシェルコマンドを用いてバッファにファイル名を表示したりできます。後者の場合、lsコマンドに渡すオプションに応じて、各ファイルに関する情報を任意で表示することも可能です。
この関数は、ディレクトリ directory 内のファイル名の一覧を返します。デフォルトでは、一覧はアルファベット順になります。
full-name が nil
以外の場合、この関数はファイルの絶対ファイル名を返します。それ以外の場合は、指定したディレクトリを基準とした相対ファイル名を返します。
match-regexp が nil
でない場合、この関数は、ディレクトリ以外の部分にその正規表現に一致する箇所が含まれるファイル名のみを返します。それ以外のファイル名はリストから除外されます。大文字小文字を区別しないファイルシステムでは、正規表現のマッチングも大文字小文字を区別しません。
nosort が nil 以外の場合、directory-files
はリストをソートしないため、ファイル名は順不同で出力されます。最大限の速度を求め、ファイルの処理順序を問わない場合にこの方法を使用してください。処理順序がユーザーに見える場合は、名前をソートした方がユーザーの満足度は高くなるでしょう。
count が nil でない場合、関数は最初の
count 個のファイル名、またはすべてのファイル名のいずれか先に現れた方を返します。count は 0 より大きい整数である必要があります。
(directory-files "~lewis")
⇒ ("#foo#" "#foo.el#" "." ".."
"dired-mods.el" "files.texi"
"files.texi.~1~")
directory が読み取り可能なディレクトリ名でない場合、エラーが報告されます。
このユーティリティ関数は、directory
がアクセス可能なディレクトリであり、かつファイルを一切含まない(すなわち空のディレクトリである)場合に t を返します。ディレクトリ内のファイルとして . および
.. を返すシステムでは、これらを無視します。
ディレクトリへのシンボリックリンクは、ディレクトリとして扱われます。シンボリックリンクを区別するには file-symlink-p を参照してください。
directory 配下にあるファイルのうち、ファイル名が regexp に一致するものをすべて返します。この関数は、指定された directory
およびそのサブディレクトリを再帰的に探索し、ベース名(すなわち、先頭のディレクトリを除いた名前)が指定された regexp に一致するファイルを探し、一致するファイルの絶対ファイル名のリストを返します(絶対ファイル名
を参照)。ファイル名は深さ優先順で返されます。つまり、あるサブディレクトリ内のファイルが、その親ディレクトリ内のファイルよりも先に返されます。デフォルトでは、ベース名が
regexp に一致するディレクトリはリストから除外されますが、オプション引数 include-directories が nil
以外の場合はそれらも含まれます。
デフォルトでは、すべてのサブディレクトリに再帰的にアクセスします。predicate が t
の場合、サブディレクトリへの再帰時にエラーが発生しても(例えば、そのユーザーが読み取り権限を持っていない場合など)、無視されます。nil でも t
でもない場合は、1つの引数(サブディレクトリの絶対パス)を受け取り、再帰対象のディレクトリであれば non-nil を返す関数である必要があります。
サブディレクトリへのシンボリックリンクはデフォルトでは辿られませんが、follow-symlinks が
nil 以外の場合は辿られます。
デフォルトでは、返されるファイル名はサブディレクトリごとに basename の辞書順でソートされます。lessp が t
である場合、ソートは行われず、各サブディレクトリ内で任意の順序で表示されます。lessp が nil でも t でもない場合、それは sort に対する :lessp 述語として適切な関数(ソートの定義
を参照)である必要があり、2つの引数(2つのファイル basename)を受け取り、1つ目が2つ目より前に来るべき場合に non-nil を返します。
file を起点として、ディレクトリツリーの階層を遡り、文字列である name が存在する最初のディレクトリを探して、そのディレクトリを返します。file がファイルである場合は、そのディレクトリが探索の起点となります。そうでない場合は、file
が起点となるディレクトリである必要があります。この関数は、起点となるディレクトリ、次にその親ディレクトリ、さらにその先の親ディレクトリ……というように探索を続け、name を含むディレクトリが見つかるか、あるいは name
が見つからないままファイルシステムのルートディレクトリに到達するまで探索を行います。後者の場合、関数は nil を返します。
引数 name は述語関数である場合もあります。この述語は、file から始まり、関数が検査するすべてのディレクトリに対して呼び出されます(file
がディレクトリでない場合でも同様です)。述語は1つの引数(ファイルまたはディレクトリ)を受け取って呼び出され、そのディレクトリが目的のものであれば
non-nil を返す必要があります。
この関数は、file がディレクトリ dir または
dir のサブディレクトリにあるファイルである場合に t を返します。また、file と dir が同一のディレクトリである場合にも t
を返します。2つのディレクトリの truename を比較します。dir
が既存のディレクトリを指定していない場合、戻り値は nil となります。
これは、どのファイルを報告するか、またそのファイル名をどのように報告するかを決定する点において、directory-files と同様です。ただし、ファイル名のリストを返す代わりに、各ファイルに対してリスト
(filename . attributes) を返し、その中で attributes は file-attributes
がそのファイルに対して返す値となります。オプション引数 id-format は、file-attributes に対応する引数と同じ意味を持ちます(ファイル属性の定義
を参照)。
この正規表現は、‘.’ と ‘..’
を除く任意のファイル名にマッチします。より正確には、空でない任意の文字列のうち、これら2つを除く部分にマッチします。これは directory-files および directory-files-and-attributes の match-regexp 引数として有用です:
(directory-files "/foo" nil directory-files-no-dot-files-regexp)
ディレクトリ ‘/foo’ が空の場合、nil を返します。
この関数はワイルドカードパターン pattern を展開し、それに一致するファイル名の一覧を返します。
pattern はデフォルトでは「glob」/ワイルドカード文字列(例:"/tmp/*.png" や "/*/*/foo.png")ですが、オプションの regexp パラメータが nil
以外の場合は、正規表現としても指定可能です。いずれの場合も、マッチ判定はサブディレクトリごとに行われるため、マッチが親ディレクトリとサブディレクトリにまたがることはありません。
pattern を絶対ファイル名として記述した場合、値も絶対となります。
pattern
が相対ファイル名として記述された場合、現在のデフォルトディレクトリを基準として解釈されます。返されるファイル名も、通常は現在のデフォルトディレクトリを基準とします。ただし、full が nil 以外の場合は、絶対パスとなります。
この関数は、ディレクトリ file のディレクトリ一覧を、switches に従って ls
形式で(現在のバッファに)挿入します。挿入後のテキストの直後にポイントを移動します。switches
には、オプションの文字列、または個々のオプションを表す文字列のリストを指定できます。
引数 file は、ディレクトリまたはワイルドカード文字を含むファイル指定のいずれかとなります。wildcard が nil 以外である場合、file をワイルドカードを含むファイル指定として扱うことを意味します。
full-directory-p が nil
以外である場合、ディレクトリ一覧にディレクトリの全内容が表示されることが想定されます。file
がディレクトリであり、かつスイッチに ‘-d’
が含まれていない場合は、t を指定してください。(ls の ‘-d’
オプションは、ディレクトリの内容を表示するのではなく、ディレクトリ自体をファイルとして記述することを指定します。)
ほとんどのシステムでは、この関数は変数 insert-directory-program
に指定されたディレクトリ一覧表示プログラムを実行することで動作します。wildcard が nil 以外の場合、ワイルドカードを展開するために shell-file-name で指定されたシェルも実行されます。
MS-DOSおよびMS-Windowsシステムには通常、標準のUnixプログラムlsが搭載されていないため、この関数はLispコードを用いて標準のUnixプログラムlsをエミュレートします。
技術的な詳細として、switches に長い ‘--dired’ オプションが含まれている場合、dired のために insert-directory はこれを特別に扱います。一方、通常はこれと同等である短い
‘-D’ オプションは、他のオプションと同様にそのまま insert-directory-program に渡されます。
このユーザーオプションは、関数 insert-directory
のディレクトリ一覧を生成するために実行するプログラムを指定します。Lispコードで一覧を生成するシステムでは、このオプションは無視されます。