Назад | Перейти на главную страницу

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

весь день были проблемы с этой единственной командой 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