весь день были проблемы с этой единственной командой scp. Искал и спрашивал людей и т. Д.
$ scp -P portNumber /ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game user@server:/ReferenceFiles/CompanyA/Game
Я попытался создать файл в каталоге, но получить файл не существует, и если я попытаюсь выполнить команду scp в каталоге, я получу «не обычный файл».
Я пробовал использовать двойные обратные косые черты для пробелов, используя одинарные и двойные кавычки. Я действительно новичок в этом и ожидал узнать это, когда мне сказали, что я буду делать в основном PHP и Flash ...
Любая помощь или предложения приветствуются.
Спасибо
Стандартных escape-символов оболочки должно хватить, поэтому добавьте запятую:
scp -P Номер порта / Справочные файлы / KompanyA \, The / Some \ DirectoryWithA \ Space / Пользователь игры @ server: / ReferenceFiles / CompanyA / Game
Один из самых простых способов обойти экранирование символов в командной строке (если это причина проблемы) - использовать завершение табуляции, чтобы позволить ему заполнить «неудобные» символы; в зависимости от того, насколько заполнен ваш каталог / 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 (из-за его отсутствия вы получили ошибку «не обычный файл»).
Наконец, может ли быть, что место назначения на сервере не существует в том виде, в каком оно было введено, и что является источником ошибки (а не исходным файлом)?
Вы должны использовать оба \ экранирование и кавычки :
scp -o port=portNumber "/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» из удаленного аргумента. Также вам нужно убрать запятую.
Например.
$ scp -r -P portNumber /ReferenceFiles/CompanyA\,The/Some\ DirectoryWithA\ Space/Game user@server:/ReferenceFiles/CompanyA