スペースを含むファイル名の安全なコピー(scp)の問題


9

セキュアコピー(scp)を使用してファイルをコピーしようとしています。次のコマンドを実行しようとしていますが、ディレクトリの場所の絶対パスにスペースがあるためエラーが発生します。

scp -r -P 8484 root@172.31.72.103:/media/New Volume/lj /home/pratheep

次のエラーが発生します。

scp: /media/New: No such file or directory  
scp: Volume/lj: No such file or directory

私は次のように余分なバックスラッシュを入れて同じコマンドを使用してみました

scp -r -P 8484 root@172.31.72.103:/media/New\ Volume/lj /home/pratheep

しかし、まだ同じエラーが発生します。

誰かがそれを修正する方法を教えてもらえますか?

回答:


18

ファイル名を2回引用する必要があります。1つはローカルシェル用で、もう1つはリモートシェル用です。最も単純なケースでは、次のいずれかを実行できます

scp -r -P 8484 root@172.31.72.103:"'/media/New Volume/lj'" /home/pratheep
scp -r -P 8484 root@172.31.72.103:'"/media/New Volume/lj"' /home/pratheep

またはタブ補完の助けを借りて

scp -r -P 8484 root@172.31.72.103:/media/New\\\ Volume/lj /home/pratheep

3
がそのトランスポートとしてをscp使用sshして、シェルの解釈に2つのパスが発生する理由を説明していることに注意してください。
msw

1

scpそして、rsyncリモートファイル名をリモートシェルに渡します。これにより、次のようにパターンを渡すことができます

scp remotehost:'*.txt' .

しかし、リモートファイル名を指定するときに追加の引用符が必要になるという厄介な結果があります。

-sオプションを渡してrsync、リモートシェルによる拡張からファイル名を保護することができます。しかし、それによってrsyncの組み込みのワイルドカード拡張が有効になるため、まだ引用する必要があります\[?*

回避策はアーカイブを転送することです:

ssh -P 8484 root@172.31.72.103 'cd "/media/New Volume" && tar cf - lj' |
tar xf - -C /home/pratheep

もう1つの方法は、リモートファイルシステムをマウントし、通常のツールを使用してコピーを実行することです。

mkdir mnt
sshfs -p 8484 root@172.31.72.103:/ mnt
cp -Rp 'mnt/media/New Volume/lj' /home/pratheep
fusermount -u mnt
rmdir mnt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.