Linuxでscpのコピー中にパスのスペースをエスケープするには?


私はLinuxに新しい、私はリモートからローカルシステムにファイルをコピーしたい...今私はLinuxシステムでscpコマンドを使用している..私はコピーしようとすると、いくつかのフォルダやファイル名がスペースを持っているファイルには、 "No such file or directory"というエラーメッセージが表示されます。

私は試した:

scp ael5105@192.168.0.200:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/

私はいくつかのリファレンスオンラインを見たが、私は完全に理解していない、これについて助けることができる?

コピー中にファイル名やディレクトリ名のスペースをどうやってエスケープできますか?


Answers



基本的には2回エスケープする必要があります。なぜなら、ローカルでエスケープされてからリモートエンドでエスケープされるからです。

あなたが行うことができるいくつかのオプションがあります(bashで):

scp user@example.com:"'web/tmp/Master File 18 10 13.xls'" .
scp user@example.com:"web/tmp/Master\ File\ 18\ 10\ 13.xls" .
scp user@example.com:web/tmp/Master\\\ File\\\ 18\\\ 10\\\ 13.xls .



作品

scp localhost:"f/a\ b\ c" .

scp localhost:'f/a\ b\ c' .

動作しません

scp localhost:'f/a b c' .

理由は、パスがscpコマンドに渡される前に、文字列がシェルによって解釈されるためです。 リモートに到達すると、エスケープされていない引用符で文字列が検索され、失敗します

この動作を確認するには、-vxオプション、つまりbash -vxを使用してシェルを起動し、実行されるコマンドの補間バージョンを表示します。




また、次のようなことができます:

scp foo@bar:"\"apath/with spaces in it/\""

引用符の第1レベルはscpによって解釈され、引用符の第2レベルはスペースを保存します。