Emacsにはファイルをコピー、命名、リネームするためのコマンドがいくつかあります。これらはすべてミニバッファーを使用してold(またはtarget)とnewの2つのファイル名を読み取り、それらをコピー、またはファイル名に調整します。これらのコマンドは、ワイルドカードを含むファイル名は許容しません。
これらすべてのコマンドは、引数newが単なるディレクトリー名(Directory Names in the Emacs Lisp Reference Manualを参照)の場合には、そのディレクトリーを実際の新しい名前として、oldをそれの非ディレクトリー成分とします。たとえば、コマンドM-x rename-file RET ~/foo RET /tmp/ RETは、~/fooを/tmp/fooにリネームします。GNU、およびその他のPOSIXシステムでは、ディレクトリー名は‘/’で終端されます。
これらのコマンドはすべて、新しいファイル名がすでに存在する場合は確認を求めます。
M-x copy-fileはファイルoldのコンテンツを、ファイルnewにコピーします。
M-x copy-directoryは、シェルコマンドcp
-r
と同じようにディレクトリーをコピーします。newがディレクトリー名の場合、このコマンドはoldディレクトリーのコピーを作成して、それをnewの下に配します。それ以外では、このコマンドはoldのコンテンツを、新しいnewという名前のディレクトリーにすべてコピーします。copy-directory-create-symlink
が非nil
でoldがシンボリックリンクなら、このコマンドはそのシンボリックリンク、nil
(デフォルト)ならリンクをフォローしてかわりにその内容をコピーします。
M-x rename-fileは、ファイルoldをnewにリネームします。すでにファイル名newが存在する場合、確認にyesと答えなければリネームは行われません。なぜなら、名前newの古い内容が失われてしまうからです。oldとnewが異なるファイルシステム上にある場合は、ファイルoldがコピーされた後に削除されます。
ファイルがバージョンコントロール(バージョンコントロールを参照してください)の配下にある時は、M-x rename-fileのかわりにM-x vc-rename-fileを使ってリネームします。バージョンコントロールされたファイルの削除とリネームを参照してください。
M-x add-name-to-fileは、既存のファイルの古い名前を削除せずに、新しい名前を追加します。新しい名前は、既存のファイルのハードリンクとして作成されます。新しい名前は、そのファイルがあるのと同じファイルシステムになければなりません。MS-Windowsでは、このコマンドはファイルがNTFSファイルシステムにあるときだけ機能します。MS-DOS、およびその他いくつかのリモートシステムタイプでは、ファイルをコピーすることにより機能します。
M-x make-symbolic-linkは、targetを指すnewという名前のシンボリックリンクを作成します。これにより、今後newというファイルを開こうとすると、その時点でtargetという名前のファイルが何であれ、ファイルのオープンが行われたときは、そのファイルを開きます。その時点でtargetという名前のファイルが存在しないときはエラーになります。このコマンドは引数targetを展開しないので、リンクの対象を相対パスで指定できます。しかし、このコマンドはtarget内の先頭の‘~’は展開するので、簡単にホームディレクトリーを指定できます。また、先頭の‘/:’は取り除くので、リテラル‘~’および‘/:’で始まる相対パスを指定することができます。ファイル名のクォートを参照してください。MS-Windowsでは、このコマンドはMS Windows Vista以降だけで機能します。newがリモートのときは、そのシステムタイプに依存して機能します。