Замість використання tar для запису на локальний диск, ви можете писати безпосередньо на віддалений сервер по мережі за допомогою ssh.
server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"
Будь-яка рядок, що слідує за вашою командою "ssh", запускатиметься на віддаленому сервері замість інтерактивного входу. Ви можете передавати вхід / вихід до цих віддалених команд і через SSH так, як якщо б вони були локальними. Введення команди в лапки дозволяє уникнути плутанини, особливо при використанні перенаправлення.
Або ви можете витягнути файл tar на іншому сервері безпосередньо:
server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"
Зверніть увагу на рідко використовуваний -C
варіант. Це означає "спочатку змінити цей каталог, перш ніж робити що-небудь".
Або, можливо, ви хочете "витягнути" з цільового сервера:
server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")
Зауважте, що <(cmd)
конструкція нова для bash і не працює в старих системах. Він запускає програму і посилає вихід на трубу, і замінює цю команду в команду так, ніби це файл.
Я міг би просто так написати наступне:
server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path")
Або наступним чином:
server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination
Або ви можете врятувати себе від горя і просто скористатися rsync:
server1$ rsync -az ./path server2:/destination/
Нарешті, пам’ятайте, що стискання даних перед передачею зменшить вашу пропускну здатність, але при дуже швидкому з'єднанні це може фактично змусити операцію зайняти більше часу . Це пов’язано з тим, що ваш комп’ютер може не в змозі стиснутись досить швидко, щоб не відставати: якщо стиснення 100 МБ займе більше часу, ніж потрібно для відправлення 100 МБ, то швидше надіслати його нестисненим.
Крім того, ви можете розглянути можливість трубопроводів gzip самостійно (а не використовувати параметр -z), щоб ви могли вказати рівень стиснення. Я мав досвід, що при швидких мережних з'єднаннях зі стислими даними використання gzip на рівні 2 або 3 (за замовчуванням - 6) дає найкращу загальну пропускну здатність у більшості випадків. Так:
server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"