Команда 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