Linuxでscpコピー時にパスの中のスペースをエスケープするには?
Linux初心者です。リモートシステムからローカルシステムにファイルをコピーしたいのですが、現在Linuxシステムでscpコマンドを使用しています。現在、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/
ネットでいくつかの参考資料を見ましたが、完全には理解できません、誰か助けてくれませんか?
コピー中にファイル名やディレクトリ名のスペースをエスケープするにはどうすればいいのでしょうか?
277
6
基本的には2回エスケープする必要があります。なぜなら、ローカルでエスケープされた後、リモート側でもエスケープされるからです。
bashでは、いくつかのオプションがあります。
作品
動作しません
その理由は、パスが scp コマンドに渡される前に、文字列がシェルによって解釈されるからです。 そのため、リモートに到達したときに、リモートはエスケープされていない引用符付きの文字列を探してしまい、失敗してしまいます
この現象を確認するには、-vx オプションを指定してシェルを起動してください。
また、次のようにすることもできます。
最初のレベルの引用符がscpによって解釈され、次に2番目のレベルの引用符がスペースを保持します。
ディレクトリの名前でスペースをエスケープするには、3つのバックスラッシュを使用します。
scp user @ host:/ path / to / directory \\\ with \\ spaces / file〜/ Downloads
。Downloads
ディレクトリにfile
をdirectory with space
と呼ばれるリモートディレクトリからコピーする必要があります。空白のファイル名を含むシェル変数でこれを機能させることは非常に困難でした。 何らかの理由で使用しています。
@Adrianのように、答えは失敗するようです。
次のように、へのパラメーター拡張を使用してバックスラッシュを空白にプリペンドすると最も効果的に機能することがわかります。
このLinuxの質問を使用してWindows 10のPowershellにこのヒントを記載して申し訳ありません。この場合、バックスラッシュでエスケープしたり、引用符で囲んだりするスペースチャーは、私には機能しませんでした。 効率的ではありませんが、「?「代わりにchar:
ファイル「tasks.txt Jun-22.bkp」については、「tasks.txt?Jun-22.bkp」。