私は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/