セキュアコピー(scp)を使用してファイルをコピーしようとしています。次のコマンドを実行しようとしていますが、ディレクトリの場所の絶対パスにスペースがあるためにエラーが発生します。
scp -r -P 8484 [email protected]:/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 [email protected]:/media/New\ Volume/lj /home/pratheep
しかし、それでも同じエラーが発生します。
誰かがそれを修正する方法を教えてもらえますか?
ファイル名は、ローカルシェル用とリモートシェル用の2回引用する必要があります。最も単純なケースでは、次のいずれかを実行できます
scp -r -P 8484 [email protected]:"'/media/New Volume/lj'" /home/pratheep
scp -r -P 8484 [email protected]:'"/media/New Volume/lj"' /home/pratheep
またはタブ補完の助けを借りて
scp -r -P 8484 [email protected]:/media/New\\\ Volume/lj /home/pratheep
scp
およびrsync
は、リモートファイル名をリモートシェルに渡します。これにより、次のようにパターンを渡すことができます。
scp remotehost:'*.txt' .
しかし、リモートファイル名を指定するときに追加の引用符が必要になるという厄介な結果があります。
-s
オプションをrsync
に渡して、リモートシェルによる拡張からファイル名を保護することができます。ただし、これによりrsyncの組み込みワイルドカード拡張がオンになるため、\[?*
を引用する必要があります。
回避策は、アーカイブを転送することです。
ssh -P 8484 [email protected] 'cd "/media/New Volume" && tar cf - lj' |
tar xf - -C /home/pratheep
もう1つの方法は、リモートファイルシステムをマウントしてから、通常のツールを使用してコピーを実行することです。
mkdir mnt
sshfs -p 8484 [email protected]:/ mnt
cp -Rp 'mnt/media/New Volume/lj' /home/pratheep
fusermount -u mnt
rmdir mnt