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


144

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

scp SERVERNAME:/DIR/* .

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

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

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


이것을 확인하면 나를 위해 일했습니다 : https://superuser.com/a/1390405/445746
AmitM

답변:


126

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

scp 'SERVERNAME:/DIR/\*' .

41
별표 앞에 따옴표 나 백 슬래시가 필요하며 둘다는 아닙니다. 그리고 scp는 그것을 확장하는 것이 아닙니다.
Patrick

3
사용해 보셨습니까? 방금 설명한대로 정확히 설명대로 작동합니다 (인용 및 이스케이프로 인해 오류가 발생 함). User1274964는 자신의 답변에서 동작을 확인합니다. touch /tmp/abcd.1234; scp 'localhost:/tmp/abcd.\*' ./:scp: /tmp/abcd.*: No such file or directory
Patrick

2
@ 패트릭 문제는 문자 별표 를 사용하는 것에 관한 것입니다. 예를 들어 리모컨에서 글을 쓰는 방법이 아니라 글로브를 사용하지 않는 것이 좋습니다.
Chris Down

2
실제로 문제는 pscp클라이언트 측에서 원격 글 로빙을 허용하는 것입니다.
Patrick

1
네 당신은 작은 따옴표를 사용하는 경우 별표 탈출 할 필요가 없습니다
지도

52

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


4
그렇기 때문에 리모컨을 잡고 싶어 한다는 의미입니다 . 문제는 리모콘에서만 글로브 를 멈추는 방법에 대한 것이 *아니라 리모콘에서 글로브 를 멈추는 방법 (리터럴을 얻는 방법)에 관한 것입니다.
Chris Down

3
@ChrisDown. 아니요. 사용자는 호스트에서 와일드 카드를 확장하지 않고 원격에서 확장하여 여러 파일과 일치시킬 수 있습니다. 반환 된 파일에는 리터럴 '*'가 없습니다. " 호스트에서 글 로빙 중지 "를 의미 했습니까 ?
Tim Bird

1

참고 : 아래에서 제공되고 올바르게 작동하는 것으로 알려진 솔루션입니다.

작은 따옴표는 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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.