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/

おすすめ記事