답변:
vonbrand에 동의합니다. 글 로빙은 실행중인 쉘에 의해 처리됩니다. 따라서 scp user@machine:/path/*
/ path / *는 원격 시스템이 아닌 LOCAL / path / *의 파일로 확장됩니다.
그러나 미소를 위해서만 시도했습니다.
scp "user@machine:/path/[regex here]" .
그리고 .... 효과가있었습니다. 해봐 따옴표를 참고하십시오. 매우 필요합니다. 알려주세요.
참고 : 원격 시스템의 사용자 계정이 아닌 다른 쉘 프로그램에 기본 수 있습니다 당신 와일드 카드 확장의 규칙이 다를 수 있습니다, 그래서 '그렇게는 그 도자기.
내가 찾은 것은 이전 HP-UX 시스템 (parisc 11.11)에서는 [^ a] *를 사용해야했습니다. 그러나 최신 시스템 (parisc 11.31 이상)에서는! (a *)와 작동합니다.
이것이 내가 끝낸 것입니다. 그리고 그것은 작동합니다 :
if [[ ${S_MACH} = "phd026a" || ${S_MACH} = "tht030a" ]]
then
scp -p -r ${S_MACH}:${S_DIR}/bin/[^a^b^c^p]* ${D_DIR}/bin/.
else
scp -p -r ${S_MACH}:${S_DIR}/bin/!((a*)|(b*)|(c*)|(p*)) ${D_DIR}/bin/.
fi
전달 된 원격 이름 scp
은 실제로 원격 에서 공백으로 구분 된 패턴 목록으로 해석됩니다. 이름에 공백이 포함 된 파일을 복사하려고 할 때 종종 성가신 일이지만 여기서는 scp -p 'user@machine:/path/a*' .
이름이로 시작하는 모든 파일을 복사하는 것이 a
좋습니다.
패턴을 인용하면 다른 장애물을 통과 한 경우 로컬이 아닌 원격으로 해석되도록 명령이 작동합니다. 패턴 !(a*)
은 기본 쉘 패턴 이 아니며 ksh 확장자입니다 (적절한 옵션을 설정하면 bash 및 zsh도 지원함). 원격 쉘은 다른 쉘과의되지 않은 경우, KSH 경우에만 작동합니다 그래서 exec ksh
에서 .profile
또는 이와 유사한.
당신이 어떤 종류의 제한 또는 골동품 환경에 있지 않는 한 쉬운 방법은 잊어 버리는 것 scp
입니다. 원격 파일을 로컬 파일처럼 작동 시키려면 로컬 파일로 만드십시오 . sshfs로 원격 디렉토리를 마운트하십시오 . 로컬 컴퓨터의 FUSE와 원격 컴퓨터 의 SFTP 서버 (즉, sftp-server
실행 파일 sshd
)가 필요합니다.
mkdir ~/net/machine
sshfs user@machine:/ ~/net/machine
cp -p ~/net/machine/path/!(a*) .