特殊文字を含むscpでファイルをコピーするにはどうすればよいですか?


9

コロンとピリオドを含むファイルをコピーしようとしています。たとえば、次のようにします。

scp "test.json-2014-08-07T11:17:58.662378" remote:tmp/

scp test.json-2014-08-07T11\:17\:58.662378 remote:tmp/

およびファイルとの組み合わせ:

scp "file:///home/.../test.json-2014-08-07T11:17:58.662378" remote:tmp/

私の推測では、scpはファイルの一部をサーバーまたはポート番号、あるいはその両方として解釈しようとします。どうすればそれを回避できますか?

ファイルの名前をtest.jsonに変更すると、問題scp test.json remote:tmp/なくscp test*62378 remote:tmp/機能しますが、機能しません。


いくつかの明らかな「解決策」は、ファイルの名前を変更し、それをコピーして、リモートサーバーで名前を戻すことです。
FinnÅrupNielsen 2014

グロブ(*)が機能しない理由の説明。これはシェルで行われるため、まったく同じテキスト(引数)がに渡されscpます。に渡されるテキスト(引数)を変更する必要がありますscp。(テキスト引数を何に変更するかについては、以下の回答を参照してください。)
ctrl-alt-delor '

:はOSXでは無効なファイル名文字であるため、これらのファイルを転送する必要がある場合は、注意が必要です。
Daenyth、2014

cygwinでは、ファイル名がハイフンで始まる場合、ファイルの前に二重ハイフンを付けることができます。例scp -- -1.JvSbrpchxuk.png user@example.com:/tmp
Shane Rowatt

回答:


19

./ファイル名の前に使用:

scp ./test.json-2014-08-07T11:17:58.662378 remote:tmp/

それがscpファイルであることを確認します。それがなければscp、コロンのため、それはホスト名であると考えます。


4

パスを先頭に追加./してエスケープします:。Cyber​​itiには詳細情報があります。例:

scp ./file\:with\:colons.txt remoteserver:

2
コロンをエスケープする必要はありません。
cuonglm 2014

のエスケープ:はシェルレベルであり、scpレベルではありません。
ctrl-alt-delor 2014

はい、脱出する必要があります。少なくとも私の殻では、脱出が必要です。
FinnÅrupNielsen 2014

@FinnÅrupNielsen:あなたの殻は何ですか?コロンをエスケープする必要はありません。シェルがバックスラッシュを追加します。それらを削除して、まだ機能することを確認できます。
cuonglm 2014

私は間違っていた。scp ./test.json-2014-08-07T11:17:58.662378 remote:tmp/実際に機能します!ごめんなさい。
FinnÅrupNielsen 2014

0

どうやら、私はこのバージョンをパス接頭辞付きで試していない:

scp /home/.../test.json-2014-08-07T11\:17\:58.662378 remote:tmp/

これも機能します:

scp ./test.json-2014-08-07T11\:17\:58.662378 remote:tmp/

https://twitter.com/h0pbeat/status/497319751031353344http://www.cyberciti.biz/faq/rsync-scp-file-name-with-colon-punctuation-in-it/感謝。

(上記のユーザーが私の前に答えることができたので)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.