scp (secure copy) コマンドの注意事項
scpは、リモートホストで起動したセキュアシェルへコマンドラインを渡して実行されるため、要注意。「ケツスラ」問題も面倒ですが。
リモートのパスにスペースが含まれるとき、"scp: ambiguous target"エラー
通常のコマンドでは、パスにスペースが含まれるとき、「\」(バックスラッシュ)でエスケープするか、全体を「'」(シングルクオーテーション)か「"」(ダブルクオーテーション)でくくります。
ls test\ location
ls 'test location'
ls "test location"
scpの場合、パスが、まずローカル側で評価されて転送、さらにリモート側で評価されてコマンド実行されるので、2重にエスケープしてあげる必要があります。色々やってみたけど、'"remote path"'が素直で良いかな。。
# test.sbをremote_hostへ転送
scp test.sb pi@remote_host.local:"/home/pi/Scratch\\ Projects/"
scp test.sb pi@remote_host.local:/home/pi/Scratch\\\ Projects/
scp test.sb pi@remote_host.local:'"/home/pi/Scratch Projects/"'
scp test.sb pi@remote_host.local:"'/home/pi/Scratch Projects/'"
ローカル側のファイルパスは2重にエスケープしなくて良い
scp 'test file.sb' pi@remote_host.local:"'/home/pi/Scratch Projects/'"