GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Name-Components.html ・ emacs-doc.conao3.com

26.9.1 ファイル名の構成要素

オペレーティングシステムは、ファイルをディレクトリにまとめます。ファイルを指定するには、ディレクトリと、そのディレクトリ内のファイル名を指定する必要があります。そのため、Emacsではファイル名を、ディレクトリ名部分と非ディレクトリ部分(またはディレクトリ内のファイル名)という2つの主要な部分で構成されるものとして扱います。どちらの部分も空であっても構いません。これら2つの部分を連結すると、元のファイル名が再現されます。23

ほとんどのシステムでは、ディレクトリ部分は最後のスラッシュ(MS-DOSやMS-Windowsの入力ではバックスラッシュも許容される)まで(それを含む)のすべてを指し、非ディレクトリ部分はそれ以外の部分を指します。

用途によっては、ディレクトリ以外の部分がさらに固有名とバージョン番号に細分化されます。ほとんどのシステムでは、バックアップファイルのみが名前にバージョン番号を含んでいます。

関数: file-name-directory filename

この関数は、filename のディレクトリ部分をディレクトリ名(ディレクトリ名を参照)として返すか、filename にディレクトリ部分が含まれていない場合は nil を返します。

GNUやその他のPOSIX準拠システムでは、この関数が返す文字列は必ずスラッシュで終わります。MS-DOSでは、コロンで終わることもあります。

(file-name-directory "lewis/foo")  ; GNU example
     ⇒ "lewis/"
(file-name-directory "foo")        ; GNU example
     ⇒ nil
関数: file-name-nondirectory filename

この関数は、filename のディレクトリ以外の部分を返します。

(file-name-nondirectory "lewis/foo")
     ⇒ "foo"
(file-name-nondirectory "foo")
     ⇒ "foo"
(file-name-nondirectory "lewis/")
     ⇒ ""
関数: file-name-sans-versions filename &optional keep-backup-version

この関数は、ファイルバージョン番号、バックアップバージョン番号、または末尾のチルダを破棄した上で、filenameを返します。

keep-backup-version が nil でない場合、ファイルシステムがそのように認識する真のファイルバージョン番号は戻り値から除外されますが、バックアップバージョン番号は保持されます。

(file-name-sans-versions "~rms/foo.~1~")
     ⇒ "~rms/foo"
(file-name-sans-versions "~rms/foo~")
     ⇒ "~rms/foo"
(file-name-sans-versions "~rms/foo")
     ⇒ "~rms/foo"
関数: file-name-extension filename &optional period

この関数は、file-name-sans-versionsを適用してバージョンやバックアップ部分を除去した後、filenameの最終的な拡張子(存在する場合)を返します。ファイル名における拡張子とは、最後の名前構成要素にある最後の‘.’に続く部分(バージョンやバックアップ部分を除く)のことです。

この関数は、foo のような拡張子のないファイル名に対して nil を返します。foo. のように拡張子が null の場合は "" を返します。ファイル名の最後の構成要素が ‘.’ で始まる場合、その ‘.’ は拡張子の開始とはみなされません。したがって、.emacs の拡張子は ‘.emacs’ ではなく nil となります。

period が nil でない場合、返される値には拡張を区切るピリオドが含まれ、filename に拡張がない場合は、値は "" となります。

関数: file-name-with-extension filename extension

この関数は、拡張子を extension に設定した filename を返します。extension の先頭にドットが1つある場合は、それが削除されます。例えば:

(file-name-with-extension "file" "el")
     ⇒ "file.el"
(file-name-with-extension "file" ".el")
     ⇒ "file.el"
(file-name-with-extension "file.c" "el")
     ⇒ "file.el"

なお、filename または extension が空である場合、あるいは filename がディレクトリのような形式である場合(すなわち、directory-name-p が nil 以外を返す場合)、この関数はエラーとなります。

関数: file-name-sans-extension filename

この関数は、filenameから拡張子(存在する場合)を差し引いた値を返します。バージョン/バックアップ部分は、ファイルに拡張子がある場合にのみ削除されます。例えば、

(file-name-sans-extension "foo.lose.c")
     ⇒ "foo.lose"
(file-name-sans-extension "big.hack/foo")
     ⇒ "big.hack/foo"
(file-name-sans-extension "/my/home/.emacs")
     ⇒ "/my/home/.emacs"
(file-name-sans-extension "/my/home/.emacs.el")
     ⇒ "/my/home/.emacs"
(file-name-sans-extension "~/foo.el.~3~")
     ⇒ "~/foo"
(file-name-sans-extension "~/foo.~3~")
     ⇒ "~/foo.~3~"

なお、最後の2つの例における ‘.~3~’ はバックアップ部分であり、拡張ではありません。

関数: file-name-base filename

この関数は file-name-sans-extension と file-name-nondirectory の合成です。 例えば、

(file-name-base "/my/home/foo.c")
    ⇒ "foo"
関数: file-name-split filename

この関数はファイル名を構成要素に分割するもので、適切なディレクトリ区切り文字を用いた string-join の逆操作と考えることができます。例えば、

(file-name-split "/tmp/foo.txt")
    ⇒ ("" "tmp" "foo.txt")
(string-join (file-name-split "/tmp/foo.txt") "/")
    ⇒ "/tmp/foo.txt"

脚注

(23)

EmacsはGNUの慣例に従い、pathnameという用語の代わりにfile nameという用語を使用しています。pathという用語は、ディレクトリ名のリストである検索パスに対してのみ使用します。