Як уникнути пробілів на шляху до scp-копії в Linux?


307

Я новачок у Linux, я хочу скопіювати файл з віддаленої в локальну систему ... тепер я використовую команду scp в системі Linux .. У мене є деякі папки або імена файлів з пробілами, коли я намагаюся скопіювати це файл, він показує повідомлення про помилку: "Немає такого файлу чи каталогу"

Я намагався:

scp ael5105@192.168.0.200:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/

Я бачив деякий довідник в Інтернеті, але не розумію досконало, чи може хтось допомогти з цього приводу?

як я можу уникнути пробілів у імені файлу чи імені каталогів під час копіювання ...


Ні не працює !! вже робіть це ..
— AlexPandiyan

Переконайтесь, що файл дійсно існує. Поставте лапки по всьому шляху, включаючи ім’я для входу та ip-адресу. Крім того, віддаліть лапки і замість цього додайте пробіл із зворотним нахилом.

Відповіді:


491

В основному вам потрібно уникнути цього двічі, тому що він втік локально, а потім на віддаленому кінці.

Є кілька варіантів, які ви можете зробити (в башті):

scp user@example.com:"'web/tmp/Master File 18 10 13.xls'" .
scp user@example.com:"web/tmp/Master\ File\ 18\ 10\ 13.xls" .
scp user@example.com:web/tmp/Master\\\ File\\\ 18\\\ 10\\\ 13.xls .

11
Це досить незначно, але на Mac та в більшості консольних додатків, таких як Terminal, є опція "Вставити утечений текст". Тому я використав другий варіант.
— Sacrilicious

3
'"шлях"' працював, поки "шлях" не вдався; висновок одиничних цитат спочатку, а потім подвійні лапки в оточенні

7
Оце Так! Це, мабуть, єдина найсмішніша поведінка програми, яку я бачив!
— jankes

2
@jankes Це не без заслуг. Той факт, що те, що ви помістили там, є аргументом командної оболонки, дозволяє робити такі речі, як scp user@example.com:'$(ls -t | head -1)' .отримати останній створений файл на сервері або scp user@example.com:'dir/*.{xml,pdf}' .отримати всі файли xml та pdf з віддаленого каталогу. Взагалі, я вважаю за краще це над зручністю з файлами, які мають пробіли. Файли з пробілами завжди турбують.
— JoL

1
чому це втеча 2 рази? будь-який спосіб змінити таку поведінку?
— Fractale

76

працює

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

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

не працює

scp localhost:'f/a b c' .

Причина полягає в тому, що рядок інтерпретується оболонкою до передачі шляху до команди scp. Тож коли він дістається до пульта, пульт дистанційного пошуку шукає рядок з нерозміщеними лапками, і він не працює

Щоб побачити це в дії, запустіть оболонку з параметрами -vx, тобто bash -vxвона відобразить інтерпольовану версію команди під час її запуску.


Використання одинарних цитат та втечі працювало для мене, але не подвійні цитати
— Маурісіо Траяно

1
@MauricioTrajano подивіться на gnu.org/software/bash/manual/html_node/Quoting.html усі цитати роблять різні речі. У простому випадку вище подвійного "або одинарного 'твору те саме
— Vorsprung

34

Також ви можете зробити щось на кшталт:

scp foo@bar:"\"apath/with spaces in it/\""

Перший рівень лапок буде інтерпретований scp, а потім другий рівень цитат збереже пробіли.


4
Ця відповідь є заниженою, враховуючи, скільки пробілів може обробляти однакова кількість символів втечі. Дякую!
— Майкл

20

Використовуйте 3 косої риски, щоб уникнути пробілів в назвах каталогів:

scp user@host:/path/to/directory\\\ with\\\ spaces/file ~/Downloads

необхідно скопіювати в Downloadsдиректорію на fileз віддаленого каталогу називається directory with spaces.


Це єдиний, хто працював на мене на Ubuntu 19.10. Ніяких подвійних котирувань, жодних м'яких і жорстких цитат у і ззовні, жодних уникнути цитат. Лише втричі провалилися місця. Дуже дивно. Дякую!
— ульдики

9

У мене виникли величезні труднощі змусити це працювати для змінної оболонки, що містить ім'я файлу з пробілом. Чомусь користуючись

file="foo bar/baz"
scp user@example.com:"'$file'"

як у @ Адріані відповідь здається невдалою.

Виявляється, що найкращим чином є використання параметра розширення для подання зворотних косих рядків у пробіл , як описано нижче.

file="foo bar/baz"
file="${file//\ /\\\ }"
scp user@example.com:"$file"

Я б запропонував більш надійне розширення "замінити все": file="${file//\ /\\\ }"
— troyfolger

Забув про цю відмінність - я іржавий на своїх розширеннях параметрів. Дякую!
— Люк Девіс

У мене не було змінної, але це задовольнило мене як гарну альтернативу 3 зворотних косих кутів для шляху з великою кількістю пробілів. На це ніхто не встигає!
— Роберт Дандон

1

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

для файлу "task.txt Jun-22.bkp" Я завантажив його за допомогою "task.txt? Jun-22.bkp"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.