sftp: завантажуйте всі файли, каталоги та підкаталоги, що містяться в папці


27

На машині AI є папка

/home/a/

На BI машині є папка

/home/b/

Я хочу перенести всі файли, каталоги та підкаталоги / home / a в / home / b з sftp На машині AI спробував команди:

sftp fibon82@machineB.com
put /home/a/* /home/b/

але це не працює, я отримую повідомлення про помилку: "пропуск нерегулярного файлу / home / a / a1" ... [a1 є підкаталогом a]
Як я можу змінити інструкцію put?

Спасибі! :)

Редагувати:

Я вирішив за допомогою scp:

scp -r /home/a/ fibon82@machineB.com:/home/b/

2
put -rпрацював би теж.
WakiMiko

1
Гаразд, але як я міг знати, що для "put command" опція -r доступна? Якщо я зазирну сюди, описується лише прапор -P ... Те саме в керівництві Дякую! :)
fibon82

Натомість слід опублікувати це як відповідь.
NN

Так. Замість того, щоб редагувати своє запитання відповіддю, вам слід відповісти на власне запитання та прийняти його.

@ fibon82 Щоб отримати сучасний посібник з OpenSSH sftp, зверніться до проекту OpenSSH .
Мартін Прикрил

Відповіді:


21

Хоча не суворо еквівалентний sftp, rsync є дуже потужною альтернативою для scp та sftp, особливо при оновленні копій з машини A на машину B, оскільки не копіює файли, які не були змінені; він також може видалити файли з машини B, які були видалені з машини A (лише тоді, коли це сказано, звичайно).

У вашому випадку, синтаксис був би

rsync -zrp /home/a/ user@remote.host.com:/home/b/

-rОпція для копіювання файлів рекурсивно, -zдозволяє стискати під час передачі, і -pзберігає права доступу до файлів (створення файлів, редагування і т.д.) при копіюванні, яка є те , що УППИ не роблять AFAIK. Можливе набагато більше варіантів; як завжди, читайте manсторінки.


Ах, дякую! :) Нова річ, яку я дізнався!
fibon82

@ fibon82: Ласкаво просимо :)
Каролос

1
я люблю тебе, я синхронізував 400 Мб даних за 1 хвилину, просто використовуючи свій код. Додам, ви також повинні використовувати - прогрес, інакше ви будете дивитись ні на що, не знаючи, що відбувається (і з якою швидкістю :))
Сандро Антонучі

1
На жаль rsyncне говорить sftp-Протокол. Отже, якщо ви встановите sftp-chroot за допомогою sshbuild 's build in,internal-sftp тоді rsyncне вдасться.
Тіно

17

У sftpцій команді рекурсивно завантажується вміст поточного каталогу у віддалений поточний каталог:

 put -r .

Див man sftp.


-rПеремикач підтримується починаючи з OpenSSH 5.4 тільки.
Мартін Прикрил

1
Зауважте, що -rперемикач призначений лише для клієнта (частина sftpкоманди). Тож серверна (тут: приймальна) сторона не потребує OpenSSH 5.4, лише клієнт повинен її підтримувати.
Тіно

9

scp(захищена копія) - це фактично Linux для передачі файлів через захищений тунель. У вашому випадку ви хочете використовувати рекурсивний перемикач, наприклад:

scp -r /home/a/ user@remote.host.com:/home/b/

5
sftp і scp - це фактично різні протоколи, обидва засновані на ssh.
парадороїд

1
Так, якщо сервер дозволяє лише протокол sftp, ця відповідь не працює.
рüффп

4

Спробуйте використовувати

put -r /home/a/ /home/b/

для отримання додаткової інформації перевірити: це


1
-rПеремикач підтримується починаючи з OpenSSH 5.4 тільки.
Мартін Прикрил

Зауважте, що -rперемикач призначений лише для клієнта (частина sftpкоманди). Тож серверна (тут: приймальна) сторона не потребує OpenSSH 5.4, лише клієнт повинен її підтримувати. І: Це має бути прийнята відповідь , оскільки отримання (можливо, непідтримуваного) rsyncяк відповіді на тег із питанням sftpтрохи заплутане.
Тіно

0

Власне, put -r має працювати. Але папка призначення має бути присутнім на вашому віддаленому хості:

sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder
 Couldn't canonicalize: No such file or directory
 ....
sftp> mkdir sourcefolder
sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder/sourcefolder
 Entering sourcefolder/
 sourcefolder/file1
 sourcefolder/file2

Чи додали ви посилання та докази, що підтверджують те, що ви заявляєте, і підтвердили цю відповідь, в одній з існуючих відповідей у ​​публікації вже не відповіли. Прочитайте "Чому мені потрібно коментувати 50 репутацій", щоб зрозуміти, як можна починати коментувати.
Pimp Juice IT

-1

У моєму випадку це rsyncбуло неможливо, тому я використав:

mput -rp /home/a/ /home/b/

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