scp が「そのようなファイルはありません」と表示するのはなぜですか?

scp が「そのようなファイルはありません」と表示するのはなぜですか?

私のマシンから別のマシンにファイルをコピーするために使用する bash スクリプトがありますscp。SSH パスワードを入力すると、スクリプトはエラーで終了し続けます。

<filename>: No such file or directory

しかし、スクリプトでファイルをチェックすると、問題はありません。set -o verbose 最初に確認したところ、スクリプトの最後に次のような結果が出ました。

scp /Volumes/FX4\ HDD/Users/matthewdavies/Downloads/NCIS.S11E01.HDTV.x264-LOL.mp4 [email protected]:"/media/3TB/TV\ Shows/NCIS"
[email protected]'s password:
/Volumes/FX4\ HDD/Users/matthewdavies/Downloads/NCIS.S11E01.HDTV.x264-LOL.mp4: No such file or directory

そこで、出力されたコマンドを実行してみたところscp、問題なくコピーされました。何が間違っているのでしょうか???

答え1

何をしているのかよく分かりませんが、例にあるコマンドを試してみると、次のようになります。

$ scp /home/saml/projects/Cooks.com\ -\ Recipe\ -\ Coconut\ Chicken.mht \
       root@remotey:"/root/some spaced out file.mht"
scp: ambiguous target

これは、ターゲット パスを引用符で囲んでおり、スペースをエスケープするバックスラッシュも含まれているためです。ただし、現在のシェルが二重引用符を剥がすと、単一のバックスラッシュも剥がされ、ターゲット パスはスペースを含む裸の文字列のままになります。スペースが正しくエスケープされるように、さらにネストするには、次のいずれかを実行する必要があります。

方法 1 - 二重引用符、一重引用符

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:"'/home/user/some spaced out file.txt'"

方法 2 - シングルクォート、ダブルクォート

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:'"/home/user/some spaced out file.txt"'

方法3 - シングルクォート、バックスラッシュ

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:'/home/user/some\ spaced\ out\ file.txt'

方法 4 - 二重引用符、バックスラッシュ

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:"/home/user/some\ spaced\ out\ file.txt"

方法5 - 3つのバックスラッシュ

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:/home/user/some\\\ spaced\\\ out\\\ file.txt

関連情報