Я новичок в Linux, я хочу скопировать файл с удаленной системы на локальную... теперь я использую команду scp в linux-системе. У меня есть несколько папок или файлов, имена с пробелами, когда я пытаюсь для копирования этого файла отображается сообщение об ошибке: "Нет такого файла или каталога"
Я пробовал:
scp [email protected]:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/
Я видел некоторую ссылку онлайн, но я не совсем понимаю, может ли кто-нибудь помочь в этом?
как я могу избежать пробелов в имени файла или именах каталогов во время копирования...
В основном вам нужно сбежать дважды, потому что он экранирован локально, а затем на удаленном конце.
Есть несколько вариантов, которые вы можете сделать (в 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 .
работы
scp localhost:"f/a\ b\ c" .
scp localhost:'f/a\ b\ c' .
не работает
scp localhost:'f/a b c' .
Причина в том, что строка интерпретируется оболочкой до того, как путь передается команде scp. Поэтому, когда он добирается до пульта дистанционного управления, удаленный ищет строку с невыпадающими кавычками, и она терпит неудачу.
Чтобы увидеть это в действии, запустите оболочку с параметрами -vx, т.е. bash -vx
, и она отобразит интерполированную версию команды при ее запуске.
"
или сингл '
работают одинаково
Также вы можете сделать что-то вроде:
scp foo@bar:"\"apath/with spaces in it/\""
Первый уровень кавычек будет интерпретироваться scp, а затем второй уровень кавычек сохранит пробелы.
У меня было огромное затруднение заставить это работать для командной строки, содержащей имя файла с пробелом. Оказывается, используя
file="foo bar/baz"
scp [email protected]:"'$file'"
как и в ответе @Adrian, кажется, что он не работает (попробуйте ввести set -x
перед приведенными выше командами, чтобы увидеть, как интерпретатор интерпретирует эту строку, это довольно неудобно, и я не совсем понимаю, почему он не работает).
Оказывается, что лучше всего использовать расширение параметра для добавления обратных косых черт к пробелу, как показано ниже.
file="foo bar/baz"
file="${file/\ /\\\ }"
scp [email protected]:"$file"
file="${file//\ /\\\ }"