diff options
author | Richard M. Stallman <[email protected]> | 2005-05-19 15:42:01 +0000 |
---|---|---|
committer | Richard M. Stallman <[email protected]> | 2005-05-19 15:42:01 +0000 |
commit | 3b68c5062f4158dab9fb503ff352d1d342ec374b (patch) | |
tree | b54691f9c82367ef354caabd608c13179130e1a9 /lisp/dired-aux.el | |
parent | b4aefb19b7176c198d19f27285367486bb13271a (diff) |
(dired-copy-file-recursive): Handle symlinks in recursive copy.
Diffstat (limited to 'lisp/dired-aux.el')
-rw-r--r-- | lisp/dired-aux.el | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index 66150968e6..eec3045b53 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -1135,23 +1135,29 @@ Special value `always' suppresses confirmation." (defun dired-copy-file-recursive (from to ok-flag &optional preserve-time top recursive) - (if (and recursive - (eq t (car (file-attributes from))) ; A directory, no symbolic link. - (or (eq recursive 'always) - (yes-or-no-p (format "Recursive copies of %s " from)))) - (let ((files (directory-files from nil dired-re-no-dot))) - (if (eq recursive 'top) (setq recursive 'always)) ; Don't ask any more. - (if (file-exists-p to) - (or top (dired-handle-overwrite to)) - (make-directory to)) - (while files - (dired-copy-file-recursive - (expand-file-name (car files) from) - (expand-file-name (car files) to) - ok-flag preserve-time nil recursive) - (setq files (cdr files)))) - (or top (dired-handle-overwrite to)) ; Just a file. - (copy-file from to ok-flag dired-copy-preserve-time))) + (let ((attrs (file-attributes from))) + (if (and recursive + (eq t (car attrs)) + (or (eq recursive 'always) + (yes-or-no-p (format "Recursive copies of %s " from)))) + ;; This is a directory. + (let ((files (directory-files from nil dired-re-no-dot))) + (if (eq recursive 'top) (setq recursive 'always)) ; Don't ask any more. + (if (file-exists-p to) + (or top (dired-handle-overwrite to)) + (make-directory to)) + (while files + (dired-copy-file-recursive + (expand-file-name (car files) from) + (expand-file-name (car files) to) + ok-flag preserve-time nil recursive) + (setq files (cdr files)))) + ;; Not a directory. + (or top (dired-handle-overwrite to)) + (if (stringp (car attrs)) + ;; It is a symlink + (make-symbolic-link (car attrs) to ok-flag) + (copy-file from to ok-flag dired-copy-preserve-time))))) ;;;###autoload (defun dired-rename-file (file newname ok-if-already-exists) |