Next: File Names, Previous: Information about Files, Up: Files [Contents][Index]
このセクションの関数は、ファイルのリネーム(rename: 改名)、コピー、削除(delete)、リンク、およびモード(パーミッション)のセットを行います。
newnameという引数をもつ関数では、newnameという名前のファイルが既に存在する場合の振る舞いは、引数ok-if-already-existsの値に依存します。
nil
の場合は、file-already-exists
エラーがシグナルされる。
以下の4つのコマンドはすべて、1つ目の引数にたいして親ディレクトリーの全階層のシンボリックリンクを再帰的にフォローしますが、その引数自体がシンボリックリンクの場合は、copy-file
だけが(再帰的な)ターゲットを置き換えます。
この関数は、oldnameという名前のファイルに、newnameという名前を追加で与える。これはnewnameという名前が、oldnameにたいする新たな“ハードリンク”になることを意味する。
以下の例の最初の部分として、2つのファイルfooとfoo3をリストする。
$ 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つの名前fooとfoo2が表示される。
(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つの名前foo、foo2、foo3がある。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 Attributesのfile-nlinks
も参照のこと。
このコマンドは、filenameをnewnameにリネームする。
filenameがfilenameとは別に追加の名前をもつ場合、それらは自身の名前をもち続ける。実際のところ、add-name-to-file
で名前newnameを追加してからfilenameを削除するのは、瞬間的な遷移状態を別とすると、リネームと同じ効果がある。
このコマンドは、ファイルoldnameをnewnameにコピーする。oldnameが存在しない場合は、エラーをシグナルする。newnameがディレクトリーの場合は、その最後の名前コンポーネントを保持するように、そのディレクトリーの中にoldnameをコピーする。
timeが非nil
の場合、この関数は新たなファイルにたいして、古いファイルと同じ最終変更時刻を与える(これはいくつかの限られたオペレーティングシステムでのみ機能する)。時刻のセットでエラーが発生した場合、copy-file
はfile-date-error
エラーをシグナルする。インタラクティブに呼び出された場合、プレフィックス引数はtimeにたいして非nil
値を指定する。
引数preserve-uid-gidがnil
の場合は、新たなファイルのユーザーおよびグループの所有権の決定を、オペレーティングシステムに委ねる(通常は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コンテキストはコピーされない。
このコマンドは、filenameにたいしてnewnameという名前のシンボリックリンクを作成する。これは、コマンド‘ln -s filename newname’と似ている。
この関数は、シンボリックリンクをサポートしないシステムでは利用できない。
このコマンドは、ファイル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を参照のこと。インタラクティブに呼び出された際は、プレフィックス引数がない場合trashはt
、それ以外はnil
である。
Create/Delete Dirsのdelete-directory
も参照のこと。
この関数は、filenameのファイルモード(またはパーミッション)をmodeにセットする。この関数は、filenameにたいして全階層でシンボリックリンクをフォローする。
非インタラクティブに呼び出された場合、modeは整数でなければならない。その整数の下位12ビットだけが使用される。ほとんどのシステムでは、意味があるのは下位9ビットだけである。modeを入力刷る、Lisp構文を使用できる。たとえば、
(set-file-modes #o644)
これは、そのファイルが所有者により読み取りと書き込み、グループメンバーにより読み取り、その他のユーザーにより読み取り可能であることを指定する。モードビットの仕様の説明は、File
permissions in The GNU Coreutils
Manualを参照のこと。
インタラクティブに呼び出された場合、modeはread-file-modes
(以下参照)を使用してミニバッファーから読み取られる。この場合、ユーザーは整数、またはパーミッションをシンボルで表現する文字列をタイプできる。
ファイルのパーミッションをリターンする関数file-modes
については、File Attributesを参照のこと。
この関数は、EmacsおよびEmacsのサブプロセスが新たに作成するファイルに、デフォルトのパーミッションをセットする。Emacsにより作成されたすべてのファイルはこれらのパーミッション、およびそれらのサブセットとなるパーミッションをもつ(デフォルトファイルパーミッションが実行を許可しても、write-region
は実行パーミッションを付与しないだろう)。UnixおよびGNU/Linuxでは、デフォルトのパーミッションは“umask”の値のビット単位の補数で与えられる。
引数modeは上記のset-file-modes
と同様、パーミッションを指定する整数であること。下位9ビットだけに意味がある。
デフォルトのファイルパーミッションは、既存ファイルの変更されたバージョンを保存する際は効果がない。ファイルの保存では、既存のパーミッションが保持される。
この関数は、デフォルトのファイルモードを整数でリターンする。
この関数は、ミニバッファーからファイルモードビットのセットを読み取る。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を参照のこと。
この関数は、modes内のシンボルによるファイルモード指定を、等価な整数に変換する。シンボル指定が既存ファイルにもとづく場合は、オプション引数base-modesからそのファイルのモードビットが取得される。その引数が省略、またはnil
の場合は、0(すべてのアクセスが許可されない)がデフォルトになる。
この関数は、filenameのアクセス時刻と変更時刻をtimeにセットする。時刻が正しくセットされればt
、それ以外はnil
がリターン値となる。timeのデフォルトはカレント時刻であり、current-time
がリターンするフォーマットでなければならない(Time of Dayを参照)。
この関数は、filename
にたいしてEmacsが認識する拡張ファイル属性をセットする。2つ目の引数attribute-alistは、file-extended-attributes
がリターンするalistと同じ形式であること。Extended Attributesを参照のこと。
この関数は、filenameにたいするSELinuxセキュリティコンテキストにcontextをセットする。context引数は、各要素が文字列であるような(user
role type range)
というリストであること。Extended Attributesを参照されたい。
この関数は、filenameのSELinuxコンテキストのセットに成功した場合はt
をリターンする。コンテキストがセットされなかった場合(SELinuxが無効、またはEmacsがSELinuxサポートなしでコンパイルされた場合等)は、nil
をリターンする。
この関数は、filenameにたいするACLにaclをセットする。acl引数は、関数file-acl
がリターンするのと同じ形式であること。Extended Attributesを参照されたい。
この関数はfilenameのACLのセットに成功したらt
、それ以外はnil
をリターンする。
Next: File Names, Previous: Information about Files, Up: Files [Contents][Index]