SSHを使用してrsyncをリモートサーバーに接続する場合、リモートパスのスペースなどをどのようにエスケープしますか?単純なバックスラッシュは、ローカルのbashプロンプトのスペースをエスケープしますが、リモートマシンでは、スペースはパスの区切りとして読み取られるため、そのパスの終わりを示します。
つまり、実際に宛先が「一部」ではなく「一部のディレクトリ」であるため、rsync -avz /path/to/source/some\ dir/ user@host.tld:/path/to/dest/some\ dir/
リモートサーバーが/path/to/dest/some/
その宛先をリモートで読み取っているので、宛先をリモートで見つけることができません。
同じコマンドを試してバックスラッシュとスペースをエスケープしてローカルのbashプロンプトを通過し、リモートサーバーのバックスラッシュを維持すると(合計3つのバックスラッシュ:)/path/to/dest/some\\\ dir/
、実際にリモートサーバーにバックスラッシュが送信されますが、リモートサーバー次に、パスとその後のスペースと文字を削除するの/path/to/dest/some\/
ではなく、パスを解釈します/path/to/dest/some\ dir/
。
パスを引用符でラップしようとすると、パスはほぼ同じように動作し、パスをスペースで効果的に切り離します。したがって、ローカルのbashプロンプトを通過するためにのみ機能します。
最初は "-"(スペース-ハイフン-スペース)セグメントが含まれるパスを使用していましたが、リモートサーバーがエラーrsync: on remote machine: -: unknown option
を返していましたが、そもそもこのスペースをエスケープする作業全体が開始されました。
では、リモートパスからスペースやハイフンなどの誤った文字を削除せずに、これをリモートサーバーで正しく機能させるにはどうすればよいですか。
-s
ダブルエスケープ手動で適用する必要のないアドレスの問題。