2008-12-19 3 views
9

dired가 파일을 비동기 적으로 복사하도록 수정하거나 알려줄 수 있습니까? dired에 여러 파일을 표시 한 다음 'C'를 사용하여 파일을 복사하면 모든 파일이 복사 될 때까지 이맥스가 잠 깁니다. 대신이 사본을 시작하고 백그라운드에서 계속 진행하면서 편집을 계속하기를 원합니다. 이 문제를 일으키는 방법이 있습니까?비동기 적으로 복사 됨

편집 : 사실 C는 dired-aux에서 dired-do-copy를 'dired-do-copy'라고 부릅니다. 혼란스러워서 죄송합니다.

답변

5

이맥스는 대부분 단일 스레드로 제한되어 있기 때문에 'C'사본과 같은 표준 dired 명령을 통해 직접 가능하지 않을 수 있습니다.

그러나 dired 명령 "dired-do-shell-command"은 백그라운드에서 작업을 수행하기 위해 쉘을 호출합니다. 복사 할 파일을 선택하고 '!'키를 사용하면 (이것은 dired-do-shell-command를 실행합니다) 그리고 'cp? [대상] '(창에있는 경우'사본 '을 사용할 수 있습니다). 필자는 이것을 테스트하지 않았기 때문에 자세한 내용은 "dired-do-shell-command"에 대한 도움말을 참조하십시오.

2

이맥스 기능 dired-do-async-shell-command도 참조하십시오.

좀 더 일반적인 해결책을 보려면 https://github.com/jwiegley/emacs-async을 참조하십시오. 여기에 별도의 Emacs 프로세스를 호출하여 임의의 Emacs Lisp 코드를 평가할 수 있습니다 (물론 약간의 대기 시간이 추가됩니다). 더 구체적으로 파일 조작은이 저장소의 dired-async.el 파일을 참조하십시오.

또한 이맥스에서 작업 이름 Concurrent Emacs로 스레딩하는 작업이 있지만 아직 없습니다. 자세한 내용은 http://www.emacswiki.org/emacs/ConcurrentEmacs을 참조하십시오.

0

이 답변은 매우 유용합니다 : https://emacs.stackexchange.com/a/13802/10761. 이 대답을 읽으면 diredssh 메서드 대신 scp 메서드로 복사됩니다 (후자는 처음에 파일을 gzip로 인코딩하고 매우 느릴 수 있음). scp 메서드는 파일이 tramp-copy-size-limit (기본적으로 10240)보다 클 경우에만 scp 프로그램으로 복사합니다. scp 메서드를 dired-async-mode과 함께 사용하면 매우 편리합니다. scp을 사용하여 신속하게 복사 할 수있을뿐만 아니라 비동기 적으로 작업을 수행 할 수 있습니다.

또한 유용하다고 생각합니다 : https://oremacs.com/2016/02/24/dired-rsync/. 이 코드 스 니펫은 rsync을 사용하여 dired에있는 파일을 복사합니다.