zsh 스크립트 rsync 동일한 원격 디렉토리의 여러 파일

zsh 스크립트 rsync 동일한 원격 디렉토리의 여러 파일

저는 Debian Bullseye를 실행 중이고(중요한 경우) rsync(스크립트에 인수로 전달됨)를 사용하여 특정 원격 디렉터리에서 여러 파일/디렉터리를 복사하는 zsh 스크립트를 작성하고 있습니다. 모두 서버의 동일한 디렉터리에 있지만 이름을 수동으로 지정해야 합니다. 지금까지 나는 다음을 가지고 있습니다 :

#!/bin/zsh

files=''

for f in "$@"
do
    files="servername:/full/path/'$f' $files"
done

rsync -rh --progress $files ~/Downloads/

오류가 발생합니다.rsync: change_dir "/home/username//servername:/full/path" failed: No such file or directory (2)

그러나 다른 모든 매개변수에 대해 위의 오류가 발생하면 매개변수에 나열된 첫 번째 파일이 성공적으로 다운로드됩니다.

어떤 이유로 zsh는 작업 디렉터리의 전체 경로를 매개변수에 추가하는 것 같습니다. 왜 이런지 아세요? 첫 번째 매개변수에 대해 왜 이 작업을 수행하지 않습니까? 어떻게 해결할 수 있나요? 아니면 동일한 원격 디렉터리에서 여러 파일을 복사하는 더 쉬운 방법이 있습니까?

참고로, 매번 ssh의 비밀번호를 입력해야 하고 밤새 실행되기를 원하기 때문에 스크립트에서 rsync를 여러 번 호출할 수 없습니다. 또한 파일/디렉터리 이름에는 공백이나 기타 특수 문자가 포함되는 경우가 있기 때문에 작은따옴표로 묶었습니다. rsync 명령은 수동으로 입력하면 작동하지만 이 스크립트에서 실행할 때는 작동하지 않습니다.

감사합니다!

답변1

그래서 알아 냈습니다. 대답은 배열을 사용하는 것입니다. 이것은 작동합니다:

#!/bin/zsh

files=()

for f in "$@"
do
    files=($files "servername:/full/path/'$f'")
done

rsync -rh --progress ${files[@]} ~/Downloads/

관련 정보