指定ディレクトリ以下のファイルの文字コードをすべて変換したい

;; ディレクトリ内のファイルのエンコーディングを一括置換
(defun convert-encoding-directory (from to encoding)
  (setq from (namestring from))
  (setq to (namestring to))
  (or (and (path-equal from to)
           (not (yes-or-no-p "入力と出力が同じっぽいっすけどいいっすか?")))
      (let (buffer)
        (unwind-protect
            (progn
              (do-events)
              (setq buffer (create-new-buffer "*foo*"))
              (set-buffer buffer)
              (set-buffer-fileio-encoding encoding)
              (mapc #'(lambda (f)
                        (message "~a..." f)
                        (create-directory
                         (directory-namestring (merge-pathnames f to)) :if-exists :skip)
                        (erase-buffer buffer)
                        (insert-file-contents (merge-pathnames f from))
                        (write-region (point-min) (point-max)
                                      (merge-pathnames f to)))
                    (directory from :file-only t :recursive t)))
          (and buffer (delete-buffer buffer)))))
  (message "done"))

xyzzy MLに投稿されたやつの改造版。今、気づいたけど、インデントをタブでしてた・・・。見づらくないといいけど。