Почему scp говорит «Нет такого файла»?

Почему scp говорит «Нет такого файла»?

У меня есть скрипт bash, который scpкопирует файл с моей машины на другую. Скрипт продолжает завершаться после ввода пароля SSH с ошибкой:

<filename>: No such file or directory

Но в скрипте я проверяю файл, и он в порядке. Я сделал это set -o verbose в начале, и вот что я получаю в конце скрипта:

scp /Volumes/FX4\ HDD/Users/matthewdavies/Downloads/NCIS.S11E01.HDTV.x264-LOL.mp4 [email protected]:"/media/3TB/TV\ Shows/NCIS"
[email protected]'s password:
/Volumes/FX4\ HDD/Users/matthewdavies/Downloads/NCIS.S11E01.HDTV.x264-LOL.mp4: No such file or directory

Итак, я попробовал выполнить scpкоманду, как она выведена, и все прошло нормально; она скопировалась. Что не так???

решение1

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

$ scp /home/saml/projects/Cooks.com\ -\ Recipe\ -\ Coconut\ Chicken.mht \
       root@remotey:"/root/some spaced out file.mht"
scp: ambiguous target

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

Примеры

метод №1 - двойные кавычки, одинарные кавычки

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:"'/home/user/some spaced out file.txt'"

метод №2 - одинарные кавычки, двойные кавычки

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:'"/home/user/some spaced out file.txt"'

метод №3 — одинарная кавычка, обратная косая черта

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:'/home/user/some\ spaced\ out\ file.txt'

метод №4 — двойные кавычки, обратная косая черта

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:"/home/user/some\ spaced\ out\ file.txt"

метод №5 - тройной обратный слеш

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:/home/user/some\\\ spaced\\\ out\\\ file.txt

Связанный контент