![scp リモート ファイルをローカル マシンに転送する](https://rvso.com/image/658344/scp%20%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%20%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%AB%E8%BB%A2%E9%80%81%E3%81%99%E3%82%8B%20.png)
スクリプトの一部として、リモート サイトからファイルをコピーしようとしています。しかし、エラーが発生しました。すべてが正常であるように思えるので、これは少し奇妙に聞こえます。
#aaa="/path/to/some file with spaces(and brackets).txt"
....
#scp [email protected]:"$aaa" /test/
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `scp -f /path/to/some file with spaces.txt'
更新: 括弧に問題があります...
答え1
各スペースと括弧をエスケープする必要があります:
#!/bin/bash
aaa='/path/to/some\ file\ with\ spaces\(and brackets\).txt'
scp [email protected]:"$aaa" /test/
ちなみに、よりわかりやすい代替案としては$aaa
、二重引用符に加えて一重引用符で囲むことです。
#!/bin/bash
aaa='/path/to/some file with spaces(and brackets).txt'
scp [email protected]:"'$aaa'" /test/
答え2
私の場合は、以下の方法がうまくいきました。スペースや括弧などをエスケープするだけで、問題は解決すると思います。
#!/bin/bash
aaa="/tmp/untitled\ text\ 2.txt"
scp -r [email protected]:"$aaa" .
答え3
リモート ホストに、リテラル名 `"/tmp/some file with spaces(and brackets).txt~ のファイルを作成しました。
名前をこのように二重引用符+一重引用符で囲むと転送できました。これに触発されて質問。
/tmp$ scp remotehost:"'/tmp/some file with spaces(and brackets).txt'" .
some file with spaces(and brackets).txt 100% 0 0.0KB/s 00:00
変数を使って
/tmp$ aaa="/tmp/some file with spaces(and brackets).txt"
/tmp$ scp puppet:"'$aaa'" .
some file with spaces(and brackets).txt 100% 0 0.0KB/s 00:00