Как избежать пробелов в пути при копировании scp в Linux?

Я новичок в Linux, я хочу скопировать файл с удаленной системы на локальную... теперь я использую команду scp в linux-системе. У меня есть несколько папок или файлов, имена с пробелами, когда я пытаюсь для копирования этого файла отображается сообщение об ошибке: "Нет такого файла или каталога"

Я пробовал:

scp [email protected]:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/

Я видел некоторую ссылку онлайн, но я не совсем понимаю, может ли кто-нибудь помочь в этом?

как я могу избежать пробелов в имени файла или именах каталогов во время копирования...

Ответ 1

В основном вам нужно сбежать дважды, потому что он экранирован локально, а затем на удаленном конце.

Есть несколько вариантов, которые вы можете сделать (в bash):

scp [email protected]:"'web/tmp/Master File 18 10 13.xls'" .
scp [email protected]:"web/tmp/Master\ File\ 18\ 10\ 13.xls" .
scp [email protected]:web/tmp/Master\\\ File\\\ 18\\\ 10\\\ 13.xls .

Ответ 2

работы

scp localhost:"f/a\ b\ c" .

scp localhost:'f/a\ b\ c' .

не работает

scp localhost:'f/a b c' .

Причина в том, что строка интерпретируется оболочкой до того, как путь передается команде scp. Поэтому, когда он добирается до пульта дистанционного управления, удаленный ищет строку с невыпадающими кавычками, и она терпит неудачу.

Чтобы увидеть это в действии, запустите оболочку с параметрами -vx, т.е. bash -vx, и она отобразит интерполированную версию команды при ее запуске.

Ответ 3

Также вы можете сделать что-то вроде:

scp [email protected]:"\"apath/with spaces in it/\""

Первый уровень кавычек будет интерпретироваться scp, а затем второй уровень кавычек сохранит пробелы.

Ответ 4

Используйте 3 обратной косой черты, чтобы избежать пробелов в именах каталогов:

scp [email protected]: /path/to/directory\\\ with\\\ spaces/file ~/Downloads

следует скопировать в каталог Downloads file из удаленного каталога, который называется directory with spaces.

Ответ 5

Мне было очень трудно заставить это работать для переменной оболочки, содержащей имя файла с пробелами. По какой-то причине, используя

file="foo bar/baz"
scp [email protected]:"'$file'"

как в @Adrian, ответ, кажется, терпит неудачу.

Оказывается, что лучше всего использовать расширение параметра до для добавления обратной косой черты к пробелу следующим образом.

file="foo bar/baz"
file="${file//\ /\\\ }"
scp [email protected]:"$file"

Ответ 6

Извините за использование этого вопроса Linux, чтобы поставить этот совет для Powershell на Windows 10: пробел, экранирующий обратную косую черту или заключенный в кавычки, не работал для меня в этом случае. Не эффективно, но я решил это с помощью "?" символ вместо:

для файла "tasks.txt Jun-22.bkp" я загрузил его, используя "tasks.txt? Jun-22.bkp"