何時間も探していて、まだこれを理解できません:(
とにかく、約40の異なるディレクトリを別のサーバー上の40の他のディレクトリに自動的にrsyncするスクリプトを作成しています。スクリプト全体を見たい場合は、ここで見ることができます: http://pastebin.com/Nt3KKvx9
しかし、重要なのは、rsync を実行する for ループです。
for ((i=0; i<${#websys[@]}; i++))
do
localpath="/nusdata/staff/NUS/NUS/Systems/${kiskasys[$i]}"
remotepath="/home/www/html/nusalaska.com/html/systems/${websys[$i]}"
rsync -rlptnvz -s "$localpath" -e "ssh -p 50014" "nusak@webserver:$remotepath/"
done
問題は、配列 "kiskasys" に、スペースを含む多くのディレクトリ名があることです (例: '101 greenbrook')。私は、配列変数の周りに一重引用符、二重引用符、「\」などのエスケープスペース、および3つすべての組み合わせを持たせることを試みました。また、 $localpath を引用符ではなく引用符で囲んでみました。
-s (--protect-args) がスペースを処理する方法と、自分の状況でそれを機能させる方法について混乱しているだけだと思います。
エラー出力は常に次のようになります。
rsync: change_dir "/nusdata/staff/NUS/NUS/101" failed: No such file or directory (2)
また
rsync: change_dir "/nusdata/staff/NUS/NUS/'101 greenbrook'" failed: No such file or directory (2)
どんな助けでも大歓迎です!
ありがとう
問題が見つかりました
スクリプトからこのページにコードをコピーする際に、誤って間違ってコピーしました...しかし、間違ってコピーした場合、上に投稿したのは、問題なく動作する完全に優れたコードでした。
私が上に投稿したのは、私自身の問題の解決策でした。
元の localpath 変数には、次のように一重引用符が含まれていました。
localpath="'/nusdata/staff/NUS/NUS/Systems/${kiskasys[$i]}'"
一重引用符が問題でした。そして、すべての人の利益のために、ここに出力例があります
echo ${kiskasys[1]}
#output would look like this:
101 greenbrook
基本的に特殊なエスケープ文字等はありません。