저는 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/