Как избежать пробелов в пути при копировании 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"