Thay vì sử dụng tar để ghi vào đĩa cục bộ của bạn, bạn có thể ghi trực tiếp vào máy chủ từ xa qua mạng bằng ssh.
server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"
Bất kỳ chuỗi nào tuân theo lệnh "ssh" của bạn sẽ được chạy trên máy chủ từ xa thay vì đăng nhập tương tác. Bạn có thể chuyển đầu vào / đầu ra đến và từ các lệnh từ xa đó thông qua SSH như thể chúng là cục bộ. Đặt lệnh trong dấu ngoặc kép sẽ tránh mọi sự nhầm lẫn, đặc biệt là khi sử dụng chuyển hướng.
Hoặc, bạn có thể trích xuất tệp tar trên máy chủ khác trực tiếp:
server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"
Lưu ý -C
tùy chọn hiếm khi được sử dụng . Nó có nghĩa là "thay đổi thư mục này trước khi làm bất cứ điều gì."
Hoặc, có lẽ bạn muốn "kéo" từ máy chủ đích:
server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")
Lưu ý rằng <(cmd)
cấu trúc này là mới đối với bash và không hoạt động trên các hệ thống cũ. Nó chạy một chương trình và gửi đầu ra tới một đường ống và thay thế đường ống đó vào lệnh như thể nó là một tệp.
Tôi có thể dễ dàng viết những điều trên như sau:
server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path")
Hoặc như sau:
server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination
Hoặc, bạn có thể tiết kiệm cho mình một số đau buồn và chỉ cần sử dụng rsync:
server1$ rsync -az ./path server2:/destination/
Cuối cùng, hãy nhớ rằng việc nén dữ liệu trước khi truyền sẽ làm giảm băng thông của bạn, nhưng trên một kết nối rất nhanh, nó thực sự có thể khiến hoạt động mất nhiều thời gian hơn . Điều này là do máy tính của bạn có thể không thể nén đủ nhanh để theo kịp: nếu việc nén 100MB sẽ mất nhiều thời gian hơn để gửi 100 MB, thì việc gửi nó không bị nén sẽ nhanh hơn.
Thay phiên, bạn có thể muốn xem xét đường ống để tự giải nén (thay vì sử dụng tùy chọn -z) để bạn có thể chỉ định mức nén. Theo kinh nghiệm của tôi, trên các kết nối mạng nhanh với dữ liệu có thể nén, sử dụng gzip ở cấp độ 2 hoặc 3 (mặc định là 6) mang lại thông lượng tổng thể tốt nhất trong hầu hết các trường hợp. Thích như vậy:
server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"