Saturday, 22 September 2012

Nén, giải nén bằng command line trong Linux

UPDATE: list files in an archive
UPDATE: extract all archive type

Dù dùng command line khá nhiều nhưng chuyển hẳn sang thì vẫn chưa thể làm ngay và luôn được.
Sau đây là những câu lệnh giúp nén / giải nén các định dạng zip, tar, tar.gz, tar.bz2, tar.xz bằng dòng lệnh:

1. zip
+ Nén:
zip file.zip file1 file2 file3
Ví dụ:
~/Huffman%zip Huffman.zip *

+ Nén cả thư mục:
zip -r directory.zip directory_name

+ Giải nén: (phải tạo thư mục bạn sẽ giải nén vào )
unzip -d thu_muc file.zip
Ví dụ:
~/Huffman%unzip -d Huffman Huffman.zip

+ Danh sách:
unzip -l file.zip

2. tar
+ Nén:
tar cvf file.tar file1 file2 file3
VD:
~/Linux%tar cvf hehe.tar a.txt b.mp3

+ Giải nén:
tar xvf file.tar

+ Danh sách:
tar tf file.tar

3. tar.gz
+ Nén
tar czvf file.tar.gz file1 file2 file3
+ Giải nén
tar xzvf file.tar.gz
+ Danh sách:
tar tzf file.tar.gz

4. tar.bz2
Tương tự:
+ Nén:
tar cjvf file.tar.bz2 file1 file2 file3 ...
+ Giải nén:
tar xjvf file.tar.bz2
+ Danh sách:
tar tjf file.tar.bz2

5. tar.xz
+ Giải nén:
tar xvf file.tar.xz
chi tiết hơn về tar.xz http://www.familug.org/2013/08/xxxtarxz.html#more

Giải thích:
Khó nhớ quá không? không, dễ lắm:
chữ z dùng với gz, chữ j dùng với bz2. Thứ tự các chữ không quan trọng.

czvf : c = compress , v = verbose, f = file, z = gz
compress the file (czf) chữ v chỉ để hiển thị thông tin về các file đã nén thôi, không cần thiết.

tương tự giải nén cho tar.bz2
xjvf : x = extract, j = bz2

tar xzf hehe.tar.gz: extract the file

5. Jar
~/Linux%jar cfve Huffman.jar Huffman *.class
~/Linux%jar xfv Huffman.jar Huffman *.class

nén các file class thành 1 file jar chạy được (Java). Chữ e để chỉ entry - lối vào cho file này, tức file .class sẽ được chạy khi ta chạy file jar bằng lệnh : java -jar file.jar


PS: Giải nén nhiều loại archive
Đoạn script thêm vào đuôi file bashrc để giải nén mọi loại archive:
https://wiki.archlinux.org/index.php/Bash#Functions

Cách khác là cài gói unp
unp - unpack (almost) everything with one command
[hvn@hvnatvcc] ~ sudo apt-get install unp

MISC
kernel.org chính thức không dùng .bz2 nữa, thay vào đó là .xz
https://www.kernel.org/happy-new-year-and-good-bye-bzip2.html


13 comments:

  1. update command: zip -r directory.zip dir_name

    ReplyDelete
  2. update UPDATE: extract all archive type

    ReplyDelete
  3. UPDATE: add command for extract tar.xz

    ReplyDelete
  4. mình xin bổ sung một lại file cũng rất hay dùng đó là file .rar

    rar a Chung.rar CVT
    # tạo một file Chung.rar từ thư mục CVT ở đường dẫn cd hiện tại

    unrar e -r Chung.rar CVT/
    # giải nén một file Chung.rar ra thư mực con CVT ở đường dẫn cd hiện tại, nếu chưa có sẽ được tại ra :D

    http://www.tecmint.com/how-to-open-extract-and-create-rar-files-in-linux/ vào đây đọc thêm nhé !

    ReplyDelete
    Replies
    1. Trên Ubuntu hay gặp tar, tar.gz, zip ko thấy rar. Hình như rar phải cài, mấy cái kia là hàng có sẵn.

      Delete
    2. rar là kiểu nén có bản quyền, trên linux chủ yếu dùng tar là chính. zip được dùng nếu muốn cross-platform

      Delete
  5. update:
    http://tukaani.org/xz/
    kiểu nén xz tạo ra file .tar.xz

    lệnh:
    tar -c --xz -f filenen.tar.xz filecannen.blah

    Kiểu nén này cho tỷ lệ nén cao hơn .gz hay .bz2

    http://tukaani.org/xz/
    (chú ý: ở những bản Linux cũ có thể ko có)

    ReplyDelete
    Replies
    1. giải nén file .xz (không phải .tar.xz)
      hvn@archhvn: $ unxz dev.sql.xz

      Delete
  6. unxz /home/hvn/Downloads/stdout.log\(8\).xz -c > salt.log

    giải nén 1 file .xz (không phải tar.xz), output ra stdout rồi redirect vào file tên là salt.log

    ReplyDelete
  7. định dạng nén bzip2 không được tiếp tục sử dụng nữa, thay thế cho nó là .xz (LZMA2)

    https://www.kernel.org/happy-new-year-and-good-bye-bzip2.html
    http://unix.stackexchange.com/questions/108100/why-are-tar-archive-formats-switching-to-xz-compression-to-replace-bzip2-and-wha

    PS: tin này từ đầu năm 2014

    ReplyDelete
  8. giai nen file filename.gz
    gunzip filename.gz

    ReplyDelete
  9. với bản GNU tar (tức lệnh tar hay thấy trên linux, không phải là BSD/OSX ...), để giải nén chỉ cần
    tar xf FILETAR

    GNU tar sẽ tự động thử tìm và phát hiện kiểu nén đã sử dụng (không cần thiết phải chỉ rõ : z J hay j

    ReplyDelete