読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

Emacs Lispでディレクトリをコピーしたり移動したり

diredの関数を使ってコピーしたり移動したりできる。

(require 'dired-aux)

これをrequireしておく必要がある。

ファイル・ディレクトリの移動

移動はdired-rename-fileを使う

(dired-rename-file path1 path2 nil)

このようにすると、path1のファイルをpath2にrenameする。最後のフラグは存在してた場合にどうするかを決めるフラグ。
nilなら、すでに存在してる場合はエラーになる。tにしておくと、上書きするようになる。
ただしディレクトリの場合は、nilでもtでも移動先のディレクトリの中に移動するようになる。
すなわち、path1のファイルがpath2のディレクトリ内に入る。

ファイル・ディレクトリのコピー

コピーはdired-copy-fileかdired-copy-file-recursiveで行う。
前者の関数は後者の関数を内部で呼び出している。

(dired-copy-file path1 path2 t)

これでファイルでもディレクトリでもpath1からpath2へコピーされる。最後のフラグは、返り値を設定するフラグ。

ちなみに、上記のようにしてelisp内でディレクトリコピーを行うと、ミニバッファで「よろしいですか?」的なことを聞かれてしまうので、次のようにした。

(dired-copy-file-recursive path1 path2 t dired-copy-preserve-time t 'always)

もっといい方法とかあれば教えていただけると幸いですorz
Emacsらしくshell-commandに頼ってもいいけど、windowsUNIXで書き方が違うからめんどくさいしなぁ...

参考

http://web.mit.edu/Emacs/source/emacs/lisp/dired-aux.el

Firefox ブラウザ無料ダウンロード