私はscp
AndroidデバイスからMacBookにファイルを頻繁に転送しますが、これは本当に魅力的です。しかし、John's folder
私のMacBookにはフォルダというフォルダがあるので、そのディレクトリにファイルをコピーしようとすると、次のようになります。
scp [email protected]:/Users/macbook/desktop/John\'s\ folder/file storage/folder
エラーが返されます
unexpected EOF error while looking for matching \`’\`
そして
unexpected end of file
この問題をどのように解決できますか?
答え1
〜のようにOpenSSH バージョン 9.02022-04-08に公開されたこのscp
プログラムは、SFTPプロトコルを直接使用します。したがって、元の質問はもう存在しないため、この回答の残りの部分はもう必要ありません。
以前のバージョンのSCPを使用しているscp
場合、または以前のSCPプロトコルに戻したい場合は、scp -O
答えはまだ適用されます。
元の答えは以下にあります。
興味深いです。私が見た他の答えは、エスケープされた引用符とエスケープされたスペースを引用符で囲まれた文字列に置き換えるように指示します。実際は同じなので、変更は表示されません(a\'\ b
シェルと同じ"a' b"
)。
scp
ここで問題はリモートシステム与えられたコマンドラインを解釈します。
たとえば、次のように動作します。
scp John\'s\ folder/file localhost:/tmp/dst
しかし、これは失敗します。
scp localhost:/tmp/src/John\'s\ folder/file /tmp/dst
localhost
(例として使用したので、user@host
状況に合わせて使用してください。)
-v
(言葉が多い) フラグを使用すると、scp
障害の原因を正確に確認できます。
debug1: Sending command: scp -v -f /tmp/src/John's folder/file
bash: -c: line 0: unexpected EOF while looking for matching `''
bash: -c: line 1: syntax error: unexpected end of file
ここで不幸な解決策は、特殊文字(スペースを含む)を2回(ローカルシェルで1回、リモートシェルで1回)エスケープする必要があることです。
scp localhost:"/tmp/src/John\'s\ folder/file" /tmp/dst
答え2
SCPでは、パラメータ全体を引用符で囲む必要があります。私の前にある2つの異なる答えは部分的に正しい答えですが、正しい答えは
scp "[email protected]:/Users/macbook/desktop/John's folder/file" storage/folder
最初の引数は引用符で囲まれていますが、2番目の引数はそうではありません。注釈が示すように、両方の引数が引用符で囲まれている場合、/ bin / scpはそれを単一の引数として呼び出し、その後に別のパラメータが必要です。
scp "[email protected]:/Users/macbook/desktop/John's folder/file storage/folder"
単一引数として読み込まれます。空白があっても二重引用符を使用すると、スペースを避けることができます。
最後に、パラメータの中間に引用符を付けると、パラメータが半分になり、user@host:/ path / to / directoryは完全なパラメータであるため、シェルには意味がありません。そのうちのいくつかを使用できますが、半分に切り取ることはできません。それ以外の場合は、2つの異なるパラメータとして扱われます。scp [email protected]:"/Users/macbook/desktop/John's folder/file" storage/folder
答え3
トリプルエスケープは私にとって効果的でした。
scp [email protected]:bob\\\'s\\\ file /local/path/
これらも動作します:
scp "[email protected]:bob\'s\ file" /local/path/
scp [email protected]:"bob\'s\ file" /local/path/
これらは以下ではありません:
scp "[email protected]:bob's file" /local/path/
scp [email protected]:bob\'s\ file /local/path/