Ống dẫn: cp | hắc ín | gzip mà không tạo tập tin trung gian?


31

Bất cứ ai có thể cho tôi biết nếu nó có thể đường ống | cái này mà không phải tạo một tập tin vật lý ở bất cứ đâu giữa A và B.tar.gz?

Đây là những gì tôi đang cố gắng làm:

  1. Tập tin
  2. Đổi tên A thành B
  3. Tar B.tar
  4. gzip -9 B.tar.gz

Ví dụ:

cp A B | tar cvf - B | gzip -9 B.tar.gz
gzip  pipe  tar 

tại sao bạn muốn ống cp A B?
Dor

1
đổi tên là mv.
Karoly Horvath

3
Vui lòng giải thích lý do tại sao bạn muốn sao chép Avào Bđầu tiên.
speakr

Câu trả lời:


42

Các ví dụ sau có thể được sử dụng để tránh tạo các tệp trung gian:

tar với gzip:

tar cf - A | gzip -9 > B.tar.gz

gzip không có tar:

gzip -9c A > B.gz

tar không có gzip:

tar cf B.tar A

Đổi tên (di chuyển) Athành Bđầu tiên không có ý nghĩa với tôi. Nếu điều này được dự định, thì chỉ cần đặt một mv A B &&trước một trong các lệnh trên và trao đổi Avới Bđó.

Ví dụ với tar và gzip:

mv A B && tar cf - B | gzip -9 > B.tar.gz


1
Điều này là chính xác và nên được đánh dấu như vậy. Bạn phải bao gồm "-" sau "tar" cho tùy chọn đường ống nếu không bạn sẽ nhận được "tar: Hèn nhát từ chối tạo một kho lưu trữ trống".
Adambean

6

Nó phụ thuộc vào phiên bản tar của bạn

Nếu bạn có phiên bản hỗ trợ chuyển đổi thành viên (--transform hoặc --xform) thì bạn chỉ cần làm

tar -c --transform=s/A/B/ A | gzip -9 > B.tar.gz

| gzip -9> B.tar.gz có thể tránh được nếu tar của bạn hỗ trợ tùy chọn -z

tar -zcvf B.tar.gz --transform=s/A/B/ A

Nếu phiên bản tar của bạn không hỗ trợ --transform thì bạn sẽ phải sao chép tệp trước, vd

 cp A B && tar -zcvf B.tar.gz B

Tuy nhiên nếu bạn chỉ nén một tệp tại sao không bỏ qua phần tar cùng nhau và chỉ cần làm

cat A | gzip -9 > B.gz

Tôi đã sử dụng cp như bạn đã làm trong ví dụ của mình nhưng đổi tên là mv

0

Nếu bạn đang sử dụng cpđể tạo một bản sao với một tên / vị trí khác, thì chỉ cần bao gồm tên đường dẫn đầy đủ / cuối cùng bạn muốn khi tạo tệp .gzip đã hoàn thành của bạn:

tar -cvf existing.file | gzip -1 > ./newdirectory/newnamed.file.tgz

Điều này không hoạt động, tạo ra "tar: Hèn nhát từ chối tạo một kho lưu trữ trống".
Adambean

@Adambean Có lẽ bạn muốn sử dụng tar -czf - some-folder > some-archive.tar.gz?
tsauerwein

1
@tsauerwein, vâng, hãy xem câu trả lời của tôi cho câu trả lời dưới đây từ 14 tháng trước ...
Adambean
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.