Đường ống vào và ra tar và gzip


11

Tôi đang cố gắng xử lý cách chuyển từ một lệnh thành một cái gì đó như gzip, cpio hoặc tar.

Các lệnh trong câu hỏi thuộc về hệ thống ZFS. Tôi đang chạy ZFS trên Ubuntu Linux 10.04.3.

Các lệnh tôi làm việc với là;

To create a snapshot;
zfs snapshot media/mypictures@20070607

To copy the snapshot to a directory;
zfs send media/mypictures@20070607 > ~/backups/20070607

Then I can also pipe into gzip
zfs send media/mypictures@20070607 | gzip > ~/backups/20070607.gz

Những phần này tôi hiểu.

Nhưng câu hỏi đầu tiên của tôi là, tôi sẽ làm gì để chuyển thành tar + gzip?

Điều này?

zfs send media/mypictures@20070607 | tar czvf > ~/backups/20070607.tar.gz

Và câu hỏi khác của tôi là làm thế nào tôi có thể lấy dữ liệu ra khỏi tarball hoặc gzip?

tôi phải dùng zfs recieve media/mypictures@20070607 < ~/backups/20070607

Vì vậy, nó sẽ chỉ là điều này nếu tôi đang sử dụng tar?

zfs recieve media/mypictures@20070607 | tar xzvf < ~/backups/20070607.tar.gz

Bất kỳ ý tưởng?

Câu trả lời:


10

tarhy vọng sẽ được cung cấp một danh sách tên tệp dưới dạng đối số dòng lệnh. Theo như tôi biết, nó không thể được sử dụng để đọc một đường ống ẩn danh (cái gì sẽ lưu trữ dưới dạng tên tệp và siêu dữ liệu tệp?)

$ echo aaa | tar cv > f.tar
tar: Cowardly refusing to create an empty archive
Try `tar --help' for more information.

Nếu dữ liệu của bạn là một mục hoặc luồng logic duy nhất, không cần sử dụng một cái gì đó như tar, được sử dụng để nhóm lại một tập hợp các tệp riêng biệt.

Nếu không, bạn sẽ phải ghi dữ liệu vào một tệp trước, tar tệp, sau đó xóa tệp.


Có thật không? Tôi mặc dù tar chỉ là một hình thức nén. Vì vậy, bỏ qua tar và chỉ gzip?
ianc1215

3
Có, chỉ cần sử dụngzfs send media/mypictures@20070607 | gzip -c > ~/backups/20070607.gz
RedGrittyBrick

2
Tar KHÔNG mong đợi một danh sách tên tệp trừ khi bạn chỉ định -ftùy chọn (tar cũng chấp nhận fmà không có "-").
drevicko 2/2/2016

1
@drevicko: Bối cảnh của câu hỏi đang tạo ra một kho lưu trữ tar. Danh sách các tệp tôi muốn nói là danh sách các tệp (và / hoặc thư mục) sẽ được đưa vào kho lưu trữ bằng văn bản. Ví dụ: cd /etc; TAPE=/tmp/rgb.tar tar c hosts passwdnơi danh sách các tệp làhosts passwd
RedGrittyBrick

2
@RedGrittyBrick nhưng bối cảnh của câu hỏi là tar từ một đường ống, tức là: không có danh sách các tập tin. Nói tar mong đợi một danh sách các tập tin là không đúng sự thật. Vấn đề là nó mong đợi một tên tệp đầu ra (đơn) khi OP chỉ định fvà anh ta đã không cung cấp nó.
drevicko 2/2/2016

10

Các -ftùy chọn chỉ định một tập tin, nếu không đầu ra đi vào thiết bị xuất chuẩn. Vì vậy, hoặc thả chuyển hướng:

zfs send media/mypictures@20070607 | tar czvf ~/backups/20070607.tar.gz

Hoặc bỏ ftùy chọn:

zfs send media/mypictures@20070607 | tar czv > ~/backups/20070607.tar.gz

Tương tự như vậy với unarring.


Điều này thực sự làm việc? Cả hai echo "hello" | tar czvf foo.tar.gzecho "hello" | tar czv > foo.tar.gzthất bại cho tôi.
425nesp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.