スペースを含むSSHパスを介したRsyncが引用符で機能しない


17

パスにスペースが含まれていない限り、SSHでRSYNCを正常に実行できます。

パスにスペースがある場合、機能しません。スラッシュ、引用符、二重引用符を試しました。

スラッシュを使用すると、出力に成功と表示されますが、転送されたファイルは表示されません。

rsync -avz /path\ with\ spaces/ user@remotelocation:/media/another\ path\ with/spaces/

一重引用符または二重引用符を使用すると、パスワードを入力した後、許可が拒否されたことがわかります

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

私に何ができる?

ありがとうございました。

回答:


12

サンプルコードとリファレンスを使用してrzrの答えを拡張し、-sフラグを追加し、パスを引用するだけで、リモートパスのスペースをエスケープする心配はありません。

rsync -avzs '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

参照用に、OPで指定されたオプション:

  • -a、アーカイブモード、-rlptgoDと等しい(-H、-A、-Xなし)
    • 含まれるもの:
    • -r、-再帰、ディレクトリへの再帰
    • -l、-links、シンボリックリンクをシンボリックリンクとしてコピー
    • -p、-perms、アクセス許可を保持
    • -t、-times、変更時間を保存
    • -g、-group、グループを保持
    • -o、-owner、所有者の保持(スーパーユーザーのみ)
    • -devices、デバイスファイルの保持(スーパーユーザーのみ)
    • -specials、特殊ファイルを保持
  • -v、-verbose、詳細度を上げる
  • -z、-compress、転送中のファイルデータの圧縮

必要な追加パラメーター:

  • -s、-protect-args、スペース分割なし、ワイルドカード文字のみ

13

ローカルシェルとリモートシェルの両方でスペースをエスケープする必要があります。これを試して:

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another\ path\ with/spaces/'

/path with spaces/ローカルシェルのソースは、単一引用符で囲むことによってのみエスケープできます'/path with spaces/'

一方、宛先の場合、ローカルシェルは一重引用符を使用してエスケープされ\、スペースはスペースの前にエスケープ文字()を使用してリモートシェルでエスケープされます。


3
強調するために、引用符とバックスラッシュの両方が必要です。
シュリダールSarnobat

1

rsyncオプション–protect-args(-s)を見てください。余分なスラッシュは不要です


1
初心者ユーザーが従うことができる例を提供すると、答えは大幅に改善されます。ありがとうございました!
オタク長老
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.