rendered paste body(defun file-shuffler(file &optional file2 dir filter pull)
"shuffle file and file2, taking a backups if necessary"
(interactive (list file (if (not file2)
(let ((files '(shell-command (concat "ls -At " dir " | grep -e \'^" filter "[^~]$\'"))))
(read-from-minibuffer
(concat "select file to " (if pull "pull " "push '") file "' to (" (car files) "): ")
(car files)
nil
files
nil
(car files))))
dir filter pull))
(if file2
(let ((dir (if dir dir (pwd)))
(let ((file (concat dir file)) (file2 (concat dir file2)))
(if pull
(let ((filebackup (concat file ".backup")))
(if (file-exists-p file) (progn (delete-file filebackup)
(rename-file file filebackup)))
(copy-file file2 file))
;push
(let ((filebackup (concat file2 ".backup")))
(if (file-exists-p file2) (progn (delete-file filebackup)
(rename (file2 filebackup)))
(copy-file file file2)))))))
(message "no file2 arg")))