Команда SCP с пробелами и запятой

У меня были проблемы весь день с этой единственной командой scp. Поиск и опрос людей и т. Д. И т. Д.

$ scp -P portNumber /ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game user@server:/ReferenceFiles/CompanyA/Game

Я попытался создать файл в каталоге, но файл get не существует, и если я попытаюсь выполнить команду scp для каталога, я получу "не обычный файл".

Я попытался использовать двойные косые черты для пробелов, используя одинарные и двойные кавычки. Я действительно новичок в этом и был удивлен, когда узнал, что буду заниматься PHP и Flash...

Любая помощь или предложения приветствуются.

Спасибо

5 ответов

Решение

Один из самых простых способов обойти экранирование символов в командной строке (если это является причиной проблемы) - это использовать табуляцию, чтобы она могла заполнять "неуклюжие" символы; в зависимости от того, насколько полный каталог /ReferenceFiles, вы можете сделать что-то вроде

  scp -P portNumber /Ref<tab>CompanyA<tab>Some<tab>Game/file user@server:...

Альтернативно, вы можете использовать? вместо символа, при условии, что не будет слишком много конфликтующих имен файлов / каталогов:

 scp -P portNumber /ReferenceFiles/CompanyA,The/Some?DirectoryWithA?Space/Game/file ...

Для каталогов вам нужно использовать опцию -r для scp (из-за этого вы получаете ошибку "не обычный файл").

Наконец, может ли получиться так, что адрес на сервере не существует в типизированном виде, и это является источником ошибки (а не исходного файла)?

Вы должны использовать как \ escape, так и кавычки:

scp -o port=portNumber "/ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game" user@server:/ReferenceFiles/CompanyA/Game

Не спрашивай меня почему, но это работает.

Стандартные экранированные оболочки должны быть достаточными, включая запятую:

scp -P номер_порта /ReferenceFiles/CompanyA\,The/Some\ DirectoryWithA\ Space/Game user@server:/ReferenceFiles/CompanyA/Game

Ваша команда работает на меня; действительно ли это та команда, которая доставляла вам неприятности, а не наоборот? scp не имеет проблем с локальными именами файлов, но имена удаленных файлов подвергаются расширению оболочки на удаленной стороне. Так что, если вы печатаете scp Команда в оболочке, вам нужно дважды заключить в кавычки имена удаленных файлов. Простой способ, если имя не содержит одинарных кавычек, - защитить специальные символы \ а затем поместите одинарные кавычки вокруг аргумента, как в

scp -P portNumber user@server:'/ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game' /ReferenceFiles/CompanyA/Game

То же самое относится и к rsync, Кстати.

Предполагая, что "Game" является каталогом, чтобы скопировать все файлы в данном каталоге с помощью scp, просто используйте параметр -r (рекурсивный) с каталогом в качестве цели. Кроме того, целью является имя родителя Game на удаленном компьютере, поэтому вы можете удалить "Game" из аргумента remote. Также вам нужно избежать этой запятой.

Например

$ scp -r -P portNumber /ReferenceFiles/CompanyA\,The/Some\ DirectoryWithA\ Space/Game user@server:/ReferenceFiles/CompanyA
Другие вопросы по тегам