답변:
scp
원격 시스템을 *
glob으로 취급하지 않으려면 리터럴 이스케이프를 전달해야합니다 (이는 이중 인용 됨).
scp 'SERVERNAME:/DIR/\*' .
touch /tmp/abcd.1234; scp 'localhost:/tmp/abcd.\*' ./
:scp: /tmp/abcd.*: No such file or directory
pscp
클라이언트 측에서 원격 글 로빙을 허용하는 것입니다.
Chris의 대답이 올바른 길을 찾았지만 Patrick의 조언이 올바른 것으로 나타났습니다. 따옴표를 사용하면 별표 앞에 백 슬래시가 필요하지 않습니다.
scp 'SERVERNAME:/tmp/file_num\*' .
scp : /tmp/file_num*.csv : 해당 파일 또는 디렉토리가 없습니다.
scp 'SERVERNAME:/tmp/file_num*' .
decisions_for_job_171642.csv 100 % 32KB 32.0KB / s 00:00 심판 _for_job_172394.csv 100 % 548KB 182.6KB / s 00:03
*
아니라 리모콘에서 글로브 를 멈추는 방법 (리터럴을 얻는 방법)에 관한 것입니다.
참고 : 아래에서 제공되고 올바르게 작동하는 것으로 알려진 솔루션입니다.
작은 따옴표는 globbing하는 경로의 일부를 별칭으로 지정하면 변수 확장을 중단합니다.
변수로 별칭이 지정된 경로를 사용하여 globbed filename command-configure_ .tar.gz * 의 유스 케이스에 DOUBLE 따옴표를 사용하는 스크립트는 다음과 같습니다 .
#!/bin/bash
USEREXECUTINGSCRIPT='admin'
SCRIPTSDIR="myscripts"
SCPUSER='terrencehoulahan'
SCPUSERPASSWD='Change-Me'
SCPHOST='1.2.3.4'
SCPDIRECTORYREMOTE='/Users/terrencehoulahan/Downloads/Ubuntu/18.04'
## Uncomment appropriate below command for your distro to install "sshpass"
#apt-get -y sshpass
#yum -y install sshpass
sshpass -p "$SCPUSERPASSWD" scp -o StrictHostKeyChecking=no $SCPUSER@$SCPHOST:"$SCPDIRECTORYREMOTE/command-configure_*.tar.gz" $(getent passwd|grep ^$(echo $USEREXECUTINGSCRIPT)|cut -d ':' -f6)/$SCRIPTSDIR/
큰 따옴표를 닫은 후 / etc / passwd 에서 지정된 사용자의 홈 디렉토리를 추출하여 로컬 디렉토리 대상을 구성합니다 .
scp 명령 자체는 사용자 개입 없이 명령 을 시작 sshpass
하고 -o StrictHostKeyChecking=no
완전히 자동화합니다 scp
. 때때로 변경 될 것으로 예상되는 하드 코딩 경로보다 복잡하지만 더 나아 보입니다.
Anyhoo, globbing하는 경로의 변수를 확장 해야하는 큰 따옴표를 사용하는 예입니다. HTH