scp '-123.jpg'로 끝나는 모든 파일 - 재귀, 공백, 와일드카드 …

scp '-123.jpg'로 끝나는 모든 파일 - 재귀, 공백, 와일드카드 …

내 초보 머리를 여기로 가져 오기에는 너무 많은 일이 일어나고 있습니다. 원격 서버의 여러 중첩 디렉터리에서 -123.jpg로 끝나는 모든 파일을 다운로드하고 싶습니다. 이러한 디렉토리 중 일부에는 이름에 공백이 있습니다. 나는 명령이 다음과 같아야 한다고 생각합니다.

scp -r user@server:/path/to/parent\ directory/*/*/*123\.jpg ./

... 여기서 "상위\ 디렉토리"는 공백이 포함된 디렉토리 이름이며 지정된 경로는 다양한 하위 디렉토리로 분할되기 전에 가능한 한 깊게 진행됩니다(예: dir/sub dir/[uniquely_id]-123.jpg 파일). . (* 와일드카드에 영향을 미치는 경우 이러한 하위 디렉토리에는 공백도 포함되는 경우가 많습니다.)

이에 대해 '일치 없음'이 반환되거나 공간 이스케이프에 개입하면 '해당 파일이나 디렉터리가 없습니다'라는 메시지가 표시됩니다. 그러므로 나는 내가 잘못한 것이 재귀 또는 와일드카드라고 생각합니다.

미리 감사드립니다.

답변1

scp로 파일 이름을 이스케이프하는 것은 까다롭습니다. 귀하의 주장은 원격 측에서 (재) 확장됩니다. "흥미로운" 문자는 큰따옴표로 묶어야 로컬 셸과 원격에서 특별한 처리를 피할 수 있습니다. 나는 다음 두 가지가 모두 당신에게 도움이 될 것으로 기대합니다.

scp user@server:'/path/to/parent\ directory/*/*/*123.jpg' ./
scp user@server:'"/path/to/parent directory"/*/*/*123.jpg' ./

혼란스럽다면 rsync는 사용하기 매우 쉽고(lothar가 언급했듯이) ssh를 통해 tar 또는 cpio를 파이핑하는 것도 매우 쉽습니다.

ssh user@server 'cd /path/to/parent\ directory;
                 find -name "*123.jpg" -print0 | cpio -0 -o' |
    cpio -i -d -v

답변2

테스트를 위한 서버 레이아웃이 부족합니다. 다음 명령이 실제로 작동하는지 모르겠지만, 이 경우에는 내부 및 제외 패턴을 지정할 수 있으므로 rsync가 scp보다 더 나을 것이라고 생각합니다. 다음과 같은 것 :

rsync -arvzSH  --include "*123.jpg" --exclude "*" user@server:/path/to/parent\ directory/ /path/to/target directory/

작동할 수 있습니다. 하지만 다시 한 번 확인하는 것이 좋습니다rsync 문서.

답변3

와일드카드를 사용하는 scp에 대한 해결 방법:

for i in "*-123.jpg"
do 
    scp $i <user>@<server>:/path/to/destination/
done

나타내다:https://community.hpe.com/t5/System-Administration/How-to-scp-mutiple-files-using-wild-chars-or-in-a-single-scp/mp/3639440/highlight/true# M238959

답변4

이 작업은 두 부분으로 나누어 수행해야 합니다.

  1. find먼저 필요한 모든 파일을 찾아 한 폴더에 복사합니다(파일 이름이 같은 경우 에는 작동하지 않습니다).-exec
  2. 그런 다음 다음을 사용하여 여러 파일을 보냅니다.scp

scp폴더 구조를 복사하기에 충분하지 않으며 폴더 트리의 복사본을 만드는 단일 명령이 없습니다.

또한 와일드카드로 파일을 선택할 수 없기 때문에 폴더에 모든 파일이 필요하고 폴더 구조를 유지하려는 경우 mc= Midnight Commander 및 해당 "쉘 링크"를 사용할 수 있습니다.

관련 정보