Next: , Previous: Information about Files, Up: Files


24.7 ファイルの名前と属性の変更

本節の関数は、ファイルを改名/コピー/削除/リンクしたり、 ファイルのモードを設定するためのものです。

引数newnameをとる関数では、 newnameで指定したファイルが既存の場合、 関数の動作は引数ok-if-already-existsの値に依存します。

— Function: add-name-to-file oldname newname &optional ok-if-already-exists

この関数は、oldnameで指定したファイルに 追加の名前newnameを与える。 つまり、newnameoldnameへの新たな『ハードリンク』になる。

つぎの例では、2つのファイルfoofoo3がある。

          % ls -li fo*
          81908 -rw-rw-rw-  1 rms       29 Aug 18 20:32 foo
          84302 -rw-rw-rw-  1 rms       24 Aug 18 20:31 foo3

add-name-to-fileを呼んでハードリンクを作成し、 ファイル一覧を表示し直す。 1つのファイルに2つの名前foofoo2があることがわかる。

          (add-name-to-file "foo" "foo2")
                nil
          
          % ls -li fo*
          81908 -rw-rw-rw-  2 rms       29 Aug 18 20:32 foo
          81908 -rw-rw-rw-  2 rms       29 Aug 18 20:32 foo2
          84302 -rw-rw-rw-  1 rms       24 Aug 18 20:31 foo3

最後につぎの式を評価し

          (add-name-to-file "foo" "foo3" t)

ファイル一覧を表示し直す。 今度は、1つのファイルに3つの名前foofoo2foo3がある。 古いfoo3の内容は失われている。

          (add-name-to-file "foo1" "foo3")
                nil
          
          % ls -li fo*
          81908 -rw-rw-rw-  3 rms       29 Aug 18 20:32 foo
          81908 -rw-rw-rw-  3 rms       29 Aug 18 20:32 foo2
          81908 -rw-rw-rw-  3 rms       29 Aug 18 20:32 foo3

1つのファイルに複数の名前を許さないオペレーティングシステムでは、 この関数は意味がない。

File Attributesfile-nlinksも参照。

— コマンド: rename-file filename newname &optional ok-if-already-exists

このコマンドは、ファイルfilenamenewnameと改名する。

filenamefilename以外の名前があれば、 それらの名前は存在し続ける。 実際、add-name-to-fileで名前newnameを追加してから filenameを削除すると、一時的な中間状態があることを除けば、 改名と同じ効果がある。

対話的に呼び出されると、この関数は ミニバッファでfilenamenewnameを聞く。 また、newnameが既存であると確認を求める。

— コマンド: copy-file oldname newname &optional ok-if-exists time

このコマンドはファイルoldnamenewnameへコピーする。 oldnameが存在しないとエラーを通知する。

timenil以外であると、 この関数は新たなファイルに古いファイルと同じ最終更新時刻を与える。 (これは特定のオペレーティングシステムでのみ動作する。) 時刻設定でエラーがあると、copy-fileは エラーfile-date-errorを通知する。

対話的に呼び出されると、この関数は ミニバッファでoldnamenewnameを聞く。 また、newnameが既存であると確認を求める。

— コマンド: delete-file filename

このコマンドは、シェルコマンド‘rm filename’と同様に ファイルfilenameを削除する。 ファイルに複数の名前があると、他の名前では存在し続ける。

ファイルが存在しなかったり削除できないと、 エラーfile-errorの適切な種類が通知される。 (UNIXでは、ファイルを収めたディレクトリに書けると 当該ファイルは削除可能である。)

Create/Delete Dirsdelete-directoryも参照。

— コマンド: make-symbolic-link filename newname &optional ok-if-exists

このコマンドは、filenameに対するシンボリックリンクnewnameを 作成する。 これはシェルコマンド‘ln -s filename newname’と同じである。

対話的に呼び出されると、この関数は ミニバッファでfilenamenewnameを聞く。 また、newnameが既存であると確認を求める。

— Function: define-logical-name name string

この関数は論理名nameに値stringを定義する。 VMSでのみ使える。

— Function: set-file-modes filename mode

この関数はfilenameのモードビットを mode(整数であること)と設定する。 modeの下位12ビットのみを使う。

— Function: set-default-file-modes mode

この関数は、Emacsやそのサブプロセスが作成する新規ファイルの デフォルトのファイルモードを設定する。 Emacsが作成する各ファイルは最初このモードになる。 UNIXでは、デフォルトのモードは『umask』の値の1の補数である。

引数modeは整数であること。 ほとんどのシステムでは、modeの下位9ビットのみが意味を持つ。

既存ファイルの変更を保存することはファイルの作成とはみなさないため、 ファイルのモードは変わらず、デフォルトのファイルモードを使わない。

— Function: default-file-modes

この関数は、現在のデフォルトのファイルモードの値を返す。

MS-DOSでは、『実行可能』ファイルモードビットのようなものはありません。 そのためEmacsは、‘.com’、‘.bat’、‘.exe’のいずれかで 終る名前のファイルを実行可能であるとみなします。 これは、file-modesfile-attributesが返す値に反映されます。