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


24.7 Changing File Names and Attributes

このセクションの関数は、ファイルのリネーム(rename: 改名)、コピー、削除(delete)、リンク、およびモード(パーミッション)のセットを行います。

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ビットだけに意味がある。

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

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-alistは、file-extended-attributesがリターンするalistと同じ形式であること。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]