Відповіді:
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) .