scp
원격 서버에서 로컬 서버로 파일을 복사하는 데 사용합니다 . 정말 불편한 점은 파일 경로를 정확하게 입력해야 한다는 점입니다. 파일 이름과 폴더 구조가 상당히 길 수 있기 때문에 저는 자동 완성에 의존하는 데 익숙합니다. 로컬에서 파일을 검색할 때처럼 각 디렉터리의 파일 이름을 보고 자동 완성되도록 하고 싶습니다.
이제 SSH만으로 파일 이름을 찾아 SCP 명령에 사용할 수 있습니다. 그러나 물론 이것은 엄청난 에너지 낭비가 될 것입니다. 또는 GUI를 사용할 수도 있지만 명령줄이 더 가벼우므로 GUI를 사용하지 않는 것이 좋습니다.
정확한 파일명을 기억하지 않고도 SCP를 사용할 수 있는 방법이 있나요?
답변1
bash-completion
(Cygwin, Debian, Ubuntu 및 기타 많은 배포판에서 사용 가능) scp
프롬프트 없이 쉘이 필요한 서버에 액세스할 수 있는 한 자동 완성을 지원합니다( ssh
일괄 모드에서 사용됩니다. 참조).ssh_config(5)
매뉴얼 페이지더 알아보기).
이 기능을 활성화하는 가장 쉬운 방법은 을 사용하는 것입니다 ssh-agent
. 데스크탑 환경에서는 이 기능이 기본적으로 활성화되어 있을 수 있습니다.
ssh-add
현재 실행 중인 에이전트(있는 경우)에 기본 키를 추가합니다. 실행 중인 에이전트가 없으면 다음을 실행하여 에이전트를 시작할 수 있습니다.
eval $(ssh-agent)
scp
에이전트가 키를 알고 나면 해당 키를 사용하여 액세스할 수 있는 서버와 관련된 명령을 자동 완성할 수 있습니다 .
자동 완성 기능 zsh
도 지원된다고 확신합니다 . 하지만 동일한 주의 사항이 있지만 데비안 패키지에는 필요한 지원이 포함되어 있습니다 . 다음과 같은 아이디어 에서 활성화해야 합니다 .scp
zsh-common
.zshrc
autoload -U compinit && compinit
(지원되는 모든 완성 항목을 로드합니다.)
답변2
Zsh에는 원격 scp
완료 기능이 있지만 비공식과 같은 특정 래퍼 기능에 별칭을 사용하지 않도록 해야 합니다.glob_scp
, 또는 다음과 같은 동일한 완료 메커니즘이 있는 경우 이를 추가할 수 있습니다.
compdef glob_scp=scp
zsh
필요할 때 특수 문자를 올바르게 인용한다는 것을 알 수 있습니다 *
(이상하게 보일 수도 있음). 지금bash-completion
이러지 마세요, 실패는 흔하지 않지만.
또는 특히 원격 완료가 없는 쉘의 경우 다음을 scp
사용할 수 있습니다 .sftp
sshfs
sftp
자체 완성 시스템이 있습니다.sshfs
cp
일반적인 완성 시스템과 함께 사용하기 에 충분한 SSH를 통해 원격 디렉터리를 마운트할 수 있습니다 .