Next: File Names, Previous: Information about Files, Up: Files [Contents][Index]
このセクションの関数はファイルのリネーム、コピー、リンク、(権限)モードのセットを行います。これらの関数はすべて処理に失敗すると、失敗した理由を記述するシステム固有ッセージを報告するためにfile-error
エラーをシグナルします。
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ビットのみ。
デフォルトのファイルパーミッションは、既存ファイルの変更されたバージョンを保存する際は効果がない。ファイルの保存では既存のパーミッションが保持される。
このマクロは新たなファイルにたいするデフォルトのパーミッションを一時的にmodes
(値は)set-file-modes
にたいする値と同様)にセットしてフォームbodyを評価する。終了時には元にデフォルトのファイルノパーミッションをリストアして、bodyの最後のフォームの値をリターンする。
これはたとえばプライベートファイルの作成に有用である。
この関数はデフォルトのファイルのパーミッションを整数でリターンする。
この関数はミニバッファーからファイルモードのビットのセットを読み取る。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と同じ形式であること。属性のセットが成功したらt
、それ以外はnil
がリターン値となる。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]