Відповіді:
sftp, як cpі scp, вимагає, щоб, копіюючи папку (і її вміст, очевидно), ви повинні чітко сказати їй, що ви хочете передати папку рекурсивно за допомогою -rпараметра.
Отже, додайте -rдо команди.
-rдо sftpкоманди під час з'єднання. sftp -r user@host
Couldn't canonicalise: No such file or directory.
# sftp user@remote-host #> get -r remote-folder
Я можу лише запропонувати, ви використовуєте rsync. Це переміщення файлів по захищеним з'єднанням.
rsync -alPvz ./source_dir server.com:destination_dir
Це те, що я використовую вже багато років.
( -aопція стосується речей, таких як рекурсія каталогу)
-a= рекурсія + зберігати символічні посилання, дозволи, часи модифікації, власник, група, спеціальні файли та файли пристроїв (для останнього потрібні привілеї суперкористувача); -l= зберігати символічні посилання (вже включені в -a); -P= показати прогрес під час передачі + зберігати частково передані файли; -v= багатослівний режим (проте здається, що обов'язковий при використанні, -Pщоб уникнути дивної (помилки?) protocol version mismatchпомилки); -z= включити стиснення переданих даних.
-lкомутатор чи ні. Я пам'ятаю, старіші версії не включали -lв -a.
Ви також можете користуватися використанням scp. Загальний формат є
scp -rp sourceDirName username@server:destDirName
scpозначає "захищена копія". Прапори є
-r повторно перейти в підкаталоги-p зберегти час модифікаціїЯ вважаю, що решта пунктів є самоосмисленими
Якщо rsyncце не варіант, я б рекомендував lftp:
lftp sftp://user@host.com/path/path/
Потім використовуйте mirrorкоманду для рекурсивного завантаження, як це:
mirror -R
(Зверніть увагу, що рекурсія за замовчуванням. Це -Rдля зворотного - для завантаження дзеркальної команди замість завантаження. Спробуйте додати, --dry-runщоб зробити пробну версію, щоб переконатися, що вона робить те, що ви очікуєте.)
Або завантажити без рекурсії:
mirror --no-recursion
Ви повинні cdпотрапити в каталоги, які ви хочете дзеркально. Чудово працює!
Якщо можете, використовуйте sshfs . Це файлова система FUSE , доступна на більшості сучасних уніцій, і працює з будь-яким сервером SFTP. Це віддалена файлова система: вона дозволяє маніпулювати віддаленими файлами (через протокол SFTP) за допомогою звичайних утиліт.
mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point
Це трохи хитрощі, але те, що для мене працює:
sshдля входу на віддалену машинуsftpвід віддаленої машини до локальної машиниgetкоманду з -rможливістю переміщення каталогу та всіх його файлів.sftp> get -r data /opt/bin get: Invalid flag -r
Якщо ви запитуєте насправді "як мені використовувати sftp для передачі каталогу", то
sftp -r user@server
Але якщо ви переносите каталог, я можу запропонувати два кращі варіанти, залежно від ваших потреб. sftpвимагає входу на віддалений сервер у командному рядку, подібному до ssh, але якщо все, що вам потрібно, це файли (файли), є більш прості та швидкі способи.
Scp
Одноразову передачу для завантаження спробуйте:
# upload source directory to remote server
scp -rp source_dir user@server:dest
#download directory from remote server:
scp -rp user@server:source_dir dest
#specifying ssh key:
scp -rp -i ~/.ssh/key user@server:source_dir dest
#remote directory has spaces
scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest
Rsync
Якщо ви плануєте регулярно синхронізувати каталоги, використання rsync має більше сенсу. Він виконує дельта між двома каталогами, економлячи час передачі та дані по дроту.
rsync -r -a -v -e ssh --delete source_dir user@server:dest
Ось перелік деяких найпоширеніших варіантів rsync: ( взято звідси )
Сподіваюся, що це допомагає!
ви можете дістатися з сервера на ваш локальний шлях
scp -rp user@server:directoryname(full path) .