cd /tmp/backup
find . -name '*.php' | cpio -pmud /home/mysite/public_html
Я использовал M-x dired-compare-directories
, но существует также EdiffTrees, который мог бы обслуживать Вас лучше в ситуации, которую Вы описываете.
Мне тоже понадобилась эта функция, и я придумал следующее. Функция ediff-каталогов-рекурсивная
работает так же, как ediff-каталоги
, но рекурсивно переходит в подкаталоги.
Магия заключается в временной замене встроенных файлов-каталогов
на самодельный рекурсивный-каталог-файлов
перед вызовом ediff-каталогов
.
(eval
(let ((directory-files-original (symbol-function 'directory-files)))
`(defun directory-files-recursive (directory &optional full match nosort)
"Like `directory-files' but recurses into subdirectories. Does not follow symbolic links."
(let* ((prefix (or (and full "") directory))
dirs
files)
(mapc (lambda (p)
(let ((fullname (if full p (concat prefix "/" p))))
(when (and (file-directory-p fullname)
(null (or (string-match "\\(^\\|/\\).$" p)
(string-match "\\(^\\|/\\)..$" p)
(file-symlink-p fullname))))
(setq dirs (cons p dirs)))))
(funcall ,directory-files-original directory full nil nosort))
(setq dirs (nreverse dirs))
(mapc (lambda (p)
(when (null (file-directory-p (if full p (concat prefix "/" p))))
(setq files (cons p files))))
(funcall ,directory-files-original directory full match nosort))
(setq files (nreverse files))
(mapc (lambda (d)
(setq files
(append files
(if full
(apply 'directory-files-recursive (list d full match nosort))
(mapcar (lambda (n)
(concat d "/" n))
(apply 'directory-files-recursive (list (concat prefix "/" d) full match nosort)))))))
dirs)
files))))
(eval
`(defun ediff-directories-recursive (dir1 dir2 regexp)
"Like `ediff-directories' but recurses into sub-directories. Does not follow symbolic links."
,(interactive-form (symbol-function 'ediff-directories))
(let ((directory-files-original (symbol-function 'directory-files)))
(unwind-protect
(progn
(fset 'directory-files (symbol-function 'directory-files-recursive))
(ediff-directories dir1 dir2 regexp)
(fset 'directory-files directory-files-original))))))
Существуетztree
пакет от Melpa, который поддерживает рекурсивное сравнение дерева каталогов:M-x ztree-diff
с использованием утилит GNU diff
для сравнения соответствующих файлов.
Если вы используете use-package
, то для установки и настройки пакета ztree
добавьте в свой.emacs
:
;; ** recursive directory tree comparison: M-x ztree-diff
(use-package ztree
:ensure t) ; needs GNU diff utility