Làm thế nào tôi có thể tạo ra một tar nén trong sun solaris?


11

Tôi đang đăng nhập vào hệ điều hành Sun Solaris. Tôi muốn tạo và giải nén một tập tin tar nén. Tôi đã thử lệnh UNIX bình thường này:

tar -cvzf file.tar.gz directory1

Nó không thực thi trong Sun OS với lỗi sau

bash-3.2$ tar -cvzf file.tar.tz directory1
tar: z: unknown function modifier
Usage: tar {c|r|t|u|x}[BDeEFhilmnopPqTvw@[0-7]][bfk][X...] [blocksize] [tarfile] [size] [exclude-file...] {file | -I include-file | -C directory file}...

2
Tại sao bạn nghĩ rằng đó là một lệnh UNIX bình thường?
schaiba

Tôi nghĩ bạn cần dành thời gian để đọc về sự khác biệt giữa các công cụ Linux và GNU.
coteyr

4
Khi họ thêm zcờ đó vào GNU tar, chúng tôi đã mất ví dụ lớn nhất về việc dạy mọi người cách suy nghĩ logic và xây dựng một đường ống ...

Câu trả lời:


27

Để tránh tạo tệp trung gian tạm thời, bạn có thể sử dụng lệnh này

tar cvf - directory1|gzip -c >file.tar.gz

2
Điều này có lợi thế tiềm năng là một số xử lý có thể xảy ra song song.
psmears

f -cần thiết, hoặc Solaris tarxuất ra thiết bị xuất chuẩn theo mặc định?
Đánh dấu

2
@Mark: Theo trang man , "Nếu fbị bỏ qua, tarsẽ sử dụng thiết bị được chỉ định bởi TAPEbiến môi trường, nếu được đặt; nếu không, nó sẽ sử dụng các giá trị mặc định được xác định trong /etc/default/tar." Vì vậy, không, có vẻ như bạn có thể cho rằng f -không cần thiết một cách an toàn .
Ilmari Karonen

@Romeo: Cảm ơn câu trả lời, tôi thấy nó hữu ích. Bạn có thể làm rõ tại sao "-" là cần thiết giữa cvf và tên thư mục không? Ngoài ra, tôi đã thử lệnh của bạn trên một số HĐH - Solaris 10, 11.4, Linux (RHEL, CentOS, Oracle, v.v.) và hoạt động ổn định. Tôi cũng đã xem lại các trang tar man tương ứng - tại sao các trang trên hoạt động trong Linux mà không có "-" trước cvf? Tôi hy vọng Linux sẽ yêu cầu một cái gì đó như "tar -cvf ...." Cảm ơn lần nữa vì câu trả lời.
RC1

@ RC1, dấu gạch ngang trong tar có nghĩa là bạn đặt tệp đầu ra là STDOUT. Có hai kiểu tham số, BSD và SYSV. Và Linux tar hoạt động với cả hai người (với và w / o dash trước cvf)
Romeo Ninov

10

Có vẻ như Solaris tarkhông biết cách nén. Vì vậy, chỉ cần làm bằng tay:

tar -cvf file.tar directory1 && gzip file.tar

Dù sao đó cũng là -zcông tắc của GNU tar. Lệnh trên sẽ tạo ra file.tar.gz.


Điều này sẽ hoạt động (miễn là bạn có đủ dung lượng đĩa dự phòng để lưu file.tartrữ kho lưu trữ không nén trung gian ), nhưng nó không cần thiết phải làm chậm và lãng phí không gian đĩa. Tôi không thể nghĩ về bất kỳ tình huống nào mà điều này sẽ thích hợp hơn với câu trả lời của Romeo Ninov .
Ilmari Karonen

1
@IlmariKaronen tôi cũng không thể. Tôi chỉ nghĩ đến điều này đầu tiên.
terdon

2

Kiểm tra nếu bạn đã SUNWgtarcài đặt. Đây là phiên bản GNU tarvà cung cấp /usr/sfw/bin/gtarsẽ cho phép sử dụng các tùy chọn GNU để tar.


-1

Vui lòng thử lệnh dưới đây

tar -cvf file.tar directory1 && gzip file.tar

(để nén tệp trên solaris)

gunzip file.tar.gz

(để giải nén)


1
Điều này không thêm một bó ngoài câu trả lời trước
Jeff Schaller

Nó cũng chỉ đưa toàn bộ tệp tar (bao gồm tất cả các tệp nhị phân trong các tiêu đề) vào thiết bị đầu cuối, thay vì hủy lưu trữ các tệp. Bạn có thể sẽ cần phải thiết lập lại thiết bị đầu cuối sau đó.
Paul_Pedant
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.