Next: , Previous: , Up: Files   [Contents][Index]


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

このセクションの関数はファイルのリネーム、コピー、リンク、(権限)モードのセットを行います。これらの関数はすべて処理に失敗すると、失敗した理由を記述するシステム固有ッセージを報告するためにfile-errorエラーをシグナルします。

newnameという引数をもつ関数では、newnameという名前のファイルが既に存在する場合には、その挙動が引数ok-if-already-existsの値に依存します。

以下の4つのコマンドはすべて1つ目の引数にたいして親ディレクトリーの全階層のシンボリックリンクを再帰的にフォローしますが、その引数自体がシンボリックリンクならcopy-fileだけが(再帰的な)ターゲットを置き換えます。

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

この関数は、oldnameという名前のファイルにnewnameという名前を追加で与える。これはnewnameという名前がoldnameにたいする新たなハードリンクになることを意味する。

以下の例の最初の部分では2つのファイルfoofoo3をリストする。

$ ls -li fo*
81908 -rw-rw-rw- 1 rms rms 29 Aug 18 20:32 foo
84302 -rw-rw-rw- 1 rms 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 rms 29 Aug 18 20:32 foo
81908 -rw-rw-rw- 2 rms rms 29 Aug 18 20:32 foo2
84302 -rw-rw-rw- 1 rms 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 rms 29 Aug 18 20:32 foo
81908 -rw-rw-rw- 3 rms rms 29 Aug 18 20:32 foo2
81908 -rw-rw-rw- 3 rms rms 29 Aug 18 20:32 foo3

この関数は1つのファイルにたいして複数の名前をもつことが許されないオペレーティングシステムでは無意味である。いくつかのシステムでは、かわりにファイルをコピーすることにより複数の名前を実装している。

File Attributesfile-nlinksも参照のこと。

Command: rename-file filename newname &optional ok-if-already-exists

このコマンドはfilenamenewnameにリネームする。

filenamefilenameとは別に追加の名前をもつなら、それらは自身の名前をもち続ける。実際のところadd-name-to-fileで名前newnameを追加してからfilenameを削除するのは、瞬間的な遷移状態を別とするとリネームと同じ効果がある。

Command: copy-file oldname newname &optional ok-if-exists time preserve-uid-gid preserve-extended-attributes

このコマンドはファイルoldnamenewnameにコピーする。oldnameが存在しなければエラーをシグナルする。newnameがディレクトリーなら、その最後の名前コンポーネントを保持するようにそのディレクトリーの中にoldnameをコピーする。

timeが非nilなら、この関数は新たなファイルにたいして古いファイルと同じ最終変更時刻を与える(これはいくつかの限られたオペレーティングシステムでのみ機能する)。時刻のセットでエラーが発生すると、copy-filefile-date-errorエラーをシグナルする。インタラクティブに呼び出された場合には、プレフィックス引数はtimeにたいして非nil値を指定する。

引数preserve-uid-gidnilなら、新たなファイルのユーザーとグループの所有権の決定をオペレーティングシステムに委ねる(通常はEmacsを実行中のユーザー)。preserve-uid-gidが非nilなら、そのファイルのユーザーとグループの所有権のコピーを試みる。これはいくつかのオペレーティングシステムで、かつそれを行うための正しいパーミッションをもつ場合のみ機能する。

オプション引数preserve-permissionsが非nilなら、この関数はoldnameのファイルモード(または“パーミッション”)、同様にACL(Access Control List)とSELinuxコンテキストをnewnameにコピーする。Information about Filesを参照のこと。

それ以外では、newnameが既存ファイルならファイルモードは変更されず、新たに作成された場合はデフォルトのファイルパーミッション(以下のset-default-file-modesを参照)によりマスクされる。どちらの場合でもACLやSELinuxコンテキストはコピーされない。

Command: make-symbolic-link filename newname &optional ok-if-exists

このコマンドはfilenameにたいしてnewnameという名前のシンボリックリンクを作成する。これはコマンド‘ln -s filename newname’と似ている。

この関数はシンボリックリンクをサポートしないシステムでは利用できない。

Command: delete-file filename &optional trash

このコマンドはファイルfilenameを削除する。ファイルが複数の名前をもつ場合には、他の名前で存在し続ける。filenameがシンボリックリンクなら、delete-fileはシンボリックリンクだけを削除して、(たとえこれが親ディレクトリーの全階層のシンボリックリンクをフォローするとしても)ターゲットは削除しない。

ファイルが存在しない、または削除できなければ適切な種類のfile-errorエラーがシグナルされる(UnixとGNU/Linuxではファイルのディレクトリーが書き込み可能ならファイルは削除可能)。

オプション引数trashが非nil、かつ変数delete-by-moving-to-trashが非nilなら、このコマンドはファイルを削除するかわりにシステムのTrash(ゴミ箱)にファイルを移動する。Miscellaneous File Operations in The GNU Emacs Manualを参照のこと。インタラクティブに呼び出された際には、プレフィックス引数がなければtrasht、それ以外はnil

Create/Delete Dirsdelete-directoryも参照のこと。

Command: set-file-modes filename mode

この関数はfilenameファイルモード(またはパーミッション)をmodeにセットする。この関数はfilenameにたいして全階層でシンボリックリンクをフォローする。

非インタラクティブに呼び出された場合には、modeは整数でなければならない。その整数の下位12ビットだけが使用される。ほとんどのシステムでは意味があるのは下位9ビットのみ。modeを入力するLisp構文を使用できる。たとえば、

(set-file-modes #o644)

これはそのファイルにたいして所有者による読み取りと書き込み、グループメンバーによる読み取り、その他のユーザーによる読み取り可能であることを指定する。モードビットの仕様の説明はFile permissions in The GNU Coreutils Manualを参照のこと。

インタラクティブに呼び出されると、moderead-file-modes(以下参照)を使用してミニバッファーから読み取られる。この場合にはユーザーは整数、またはパーミッションをシンボルで表現する文字列をタイプできる。

ファイルのパーミッションをリターンする関数file-modesについてはFile Attributesを参照のこと。

Function: set-default-file-modes mode

この関数はEmacsとEmacsのサブプロセスが新たに作成するファイルに、デフォルトのパーミッションをセットする。Emacsにより作成されたすべてのファイルはこれらのパーミッション、およびそれらのサブセットとなるパーミッションをもつ(デフォルトファイルパーミッションが実行を許可してもwrite-regionは実行パーミッションを付与しないだろう)。UnixとGNU/Linuxでは、デフォルトのパーミッションは‘umask’の値のビット単位の補数で与えられる。

引数modeは上記のset-file-modesと同様、パーミッションを指定する整数であること。意味があるのは下位9ビットのみ。

デフォルトのファイルパーミッションは、既存ファイルの変更されたバージョンを保存する際は効果がない。ファイルの保存では既存のパーミッションが保持される。

Macro: with-file-modes mode body…

このマクロは新たなファイルにたいするデフォルトのパーミッションを一時的にmodes (値は)set-file-modesにたいする値と同様)にセットしてフォームbodyを評価する。終了時には元にデフォルトのファイルノパーミッションをリストアして、bodyの最後のフォームの値をリターンする。

これはたとえばプライベートファイルの作成に有用である。

Function: default-file-modes

この関数はデフォルトのファイルのパーミッションを整数でリターンする。

Function: read-file-modes &optional prompt base-file

この関数はミニバッファーからファイルモードのビットのセットを読み取る。1つ目のオプション引数promptは非デフォルトのプロンプトを指定する。2つ目のオプション引数base-fileはユーザーが既存ファイルのパーミッションに相対的なモードビット指定をタイプした場合に、この関数がリターンするモードビッの元となる権限をもつファイルの名前を指定する。

ユーザー入力が8進数で表される場合には、この関数はその数字をリターンする。それが"u=rwx"のようなモードビットの完全なシンボル指定なら、この関数はfile-modes-symbolic-to-numberを使用して、それを等価な数字に変換して結果をリターンする。"o+g"のように相対的な指定なら、その指定の元となるパーミッションはbase-fileのモードビットから取得される。base-fileが省略またはnilなら、この関数は元となるモードビットとして0を使用する。完全指定と相対指定は"u+r,g+rx,o+r,g-w"のように組み合わせることができる。ファイルモード指定の説明はFile permissions in The GNU Coreutils Manualを参照のこと。

Function: file-modes-symbolic-to-number modes &optional base-modes

この関数はmodes内のシンボルによるファイルモード指定を等価な整数に変換する。シンボル指定が既存ファイルにもとづく場合には、オプション引数base-modesからそのファイルのモードビットが取得される。その引数が省略またはnilなら、0(すべてのアクセスが許可されない)がデフォルトになる。

Function: set-file-times filename &optional time

この関数はfilenameのアクセス時刻と変更時刻をtimeにセットする。時刻が正しくセットされればt、それ以外はnilがリターン値となる。timeのデフォルトはカレント時刻であり、current-timeがリターンするフォーマットでなければならない(Time of Dayを参照)。

Function: set-file-extended-attributes filename attribute-alist

この関数はfilenameにたいしてEmacsが認識する拡張ファイル属性をセットする。2つ目の引数attribute-alistfile-extended-attributesがリターンするalistと同じ形式であること。属性のセットが成功したらt、それ以外はnilがリターン値となる。Extended Attributesを参照のこと。

Function: set-file-selinux-context filename context

この関数はfilenameにたいするSELinuxセキュリティコンテキストにcontextをセットする。context引数は各要素が文字列であるような(user role type range)というリストであること。Extended Attributesを参照のこと。

この関数はfilenameのSELinuxコンテキストのセットに成功したらtをリターンする。コンテキストがセットされなかった場合(SELinuxが無効、またはEmacsがSELinuxサポートなしでコンパイルされた場合等)にはnilをリターンする。

Function: set-file-acl filename acl

この関数はfilenameにたいするACLにaclをセットする。acl引数は関数file-aclがリターンするのと同じ形式であること。Extended Attributesを参照のこと。

この関数はfilenameのACLのセットに成功したらt、それ以外はnilをリターンする。


Next: , Previous: , Up: Files   [Contents][Index]