Как мне скопировать файл с помощью 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/работает.

Финн Оруп Нильсен
источник
Позвольте мне отметить, что одно очевидное «решение» - переименовать файл, скопировать его и переименовать обратно на удаленный сервер.
Финн Оруп Нильсен
Объяснение того, почему globs ( *) не работают. Это делается в оболочке, поэтому точно такой же текст (аргумент) будет передан scp. Вам нужно изменить текст (аргумент), который передается scp. (см. ответ ниже, для чего изменить текстовый аргумент на.)
ctrl-alt-delor
Следует отметить, что :это недопустимый символ имени файла в OSX, поэтому, если вам когда-нибудь понадобится перенести эти файлы туда, стоит кое-что помнить.
Дениф
В 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думает , что это имя хоста из-за двоеточия.

cuonglm
источник
4

Используйте путь, предваряя ./и избегая своих :. Киберити имеет больше информации . Пример:

scp ./file\:with\:colons.txt remoteserver:
Karlo
источник
2
Вам не нужно избегать толстой кишки.
Cuonglm
Ваш выход :находится на уровне оболочки, а не на уровне scp.
Ctrl-Alt-Delor
Да, тебе нужно сбежать. По крайней мере, в моей раковине мне нужен побег.
Финн Оруп Нильсен
@ FinnÅrupNielsen: Какова ваша оболочка? Вам не нужно избегать двоеточия, оболочка добавляет обратную косую черту для вас. Вы можете удалить их и увидеть, что это все еще работает.
cuonglm
Я был неправ. scp ./test.json-2014-08-07T11:17:58.662378 remote:tmp/действительно работает! Сожалею.
Финн Оруп Нильсен
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/497319751031353344 и http://www.cyberciti.biz/faq/rsync-scp-file-name-with-colon-punctuation-in-it/ Спасибо.

(как вышеупомянутые пользователи сумели ответить раньше меня)

Финн Оруп Нильсен
источник