[unix] scp로 복사 할 때 와일드 카드 (*)를 사용하는 방법은 무엇입니까?

*경로에서 문자를 사용할 때 왜 scp로 복사 할 수 없습니까?

scp SERVERNAME:/DIR/* .

*경로에서 허용하기 위해 SCP는 어떤 구성이 필요 합니까?

업데이트 : 문제가 서버 측에 있지 않습니다. pscp가 SCPv1을 사용하려고하므로 오류 메시지가 나타납니다.

*라는 파일에 관한 scp 명령 줄 및 오류 메시지



답변

scp원격 시스템을 *glob으로 취급하지 않으려면 리터럴 이스케이프를 전달해야합니다 (이는 이중 인용 됨).

scp 'SERVERNAME:/DIR/\*' .


답변

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


답변