Untar, ungz, gz, tar - làm thế nào để bạn nhớ tất cả các tùy chọn hữu ích?


74

Tôi khá chắc chắn rằng tôi không phải là người duy nhất gặp phải vấn đề sau: mỗi lần tôi cần giải nén một tập tin trong * nix, tôi không thể nhớ tất cả các công tắc, và kết thúc việc này, điều này làm tôi suy nghĩ về tần suất tôi cần làm cái này.

Bạn có một bảng cheat nén tốt? Hoặc làm thế nào về một mnemonic cho tất cả các công tắc khó chịu trong tar?

Tôi đang làm cho bài viết này là một wiki để chúng ta có thể tạo ra một bảng cheat đẹp ở đây.

Ồ, và về các trang của con người: có một điều họ không hữu ích, đó là tìm ra cách giải nén một tập tin.


1
sử dụng các trang hướng dẫn, sau đó bạn không phải tạo wiki và chỉ phải nhớ lệnh man :-) man (1)
Florenz Kley

9
eXtract Zee File là cách tôi nhớ nó
Canada Luke

Tạo tệp Zee Vocking có thể phù hợp để tạo .tar.gz
CousinCocaine

Câu trả lời:


65

Hoặc làm thế nào về việc sử dụng shell với khả năng hoàn thành nâng cao (như zsh hoặc phiên bản mới của bash) sẽ hoàn thành các tùy chọn cho bạn, với sự trợ giúp toàn diện? :))

Về tar: chỉ cần nhìn vào bàn phím "qwerty". Có chữ "zxcvf" cạnh nhau. Bạn cần "tập tin tar czvf file.tar.gz" hoặc "tar xzvf file.tar.gz".


Đạo cụ để thực sự trả lời câu hỏi :)

Bây giờ, đó là một mẹo "qwerty" COOL! :)

fricking tuyệt vời!
deadprogrammer

2
Một mẹo khác là không cần ztùy chọn (hoặc jtùy chọn cho .bz2tệp) khi trích xuất với các phiên bản hiện đại của tar. Nó tự động giải nén tập tin.
Nate

10
Tôi đã sử dụng tar khoảng mười tỷ lần và không bao giờ nhận thấy rằng tất cả các tùy chọn được sử dụng phổ biến nhất nằm ngay cạnh nhau trên bàn phím. headsmack
Tyler McHenry

40

Tóm tắt tùy chọn Tar

Bạn được hoan nghênh chỉnh sửa phần này để thêm các công tắc bí truyền khác nhưng đây là những điều cơ bản:

  • x - giải nén tập tin
  • c - tạo kho lưu trữ
  • t file danh sách -
  • v - verbose (liệt kê các tệp khi nó xử lý chúng)
  • j - sử dụng nén bz2
  • z - sử dụng nén gz
  • f - đọc hoặc ghi tập tin vào đĩa

Ví dụ

Giải nén tệp tar.gz: tar zxf tarball.tar.gz

Giải nén tệp tar.bz2: tar jxf tarball.tar.bz2

Tạo tập tin tar.gz: tar zcvf tarvall.tar.gz mydir / *


23

Có một tập lệnh Perl nhỏ gọi là "unp".

unp filename.tar.gz

... Và nó trích xuất mọi thứ. Hoạt động với bất kỳ tệp nén nào miễn là bạn có mã nhị phân phù hợp. Và bạn chỉ cần quên đi cú pháp hoặc bất kỳ điều tào lao đó. Kiểm tra kho lưu trữ phân phối Linux của bạn. Nó nên ở đó (ít nhất là trên Arch, Debian và Ubuntu).


Ngay cả sau khi sử dụng tar khá lâu tôi vẫn cần google cho những lá cờ ngu ngốc. unp là con đường để đi.
Yada

8

Thực sự với việc sử dụng thường xuyên, tôi tạo ra sự khác biệt giữa trích xuất dữ liệu (x) và nén dữ liệu (c):

Để giải nen:

tar xzf data.tgz

Để nén:

tar czf data.tgz

Hơn nữa, bạn có thể thêm hai hàm nữa .bashrc:

function extract () {     
        if ($# -ne 1); then
                echo "Usage: $0  `<compressed archive>"`
                exit 1
        fi
        tar xzf $1
}

function compress () {
        if ($# -ne 2); then
                echo "Usage: $0 `<compressed archive> <files|directories>"`
                exit 1
        fi
        tar czf $1 $2
}

Có một chức năng giải nén tuyệt vời khác, nó phát hiện phần mở rộng của tệp nén của bạn và thực hiện công việc cho bạn:

extract () {
   if [ -f $1 ] ; then
       case $1 in
           *.tar.bz2)   tar xvjf $1    ;;
           *.tar.gz)    tar xvzf $1    ;;
           *.bz2)       bunzip2 $1     ;;
           *.rar)       unrar x $1       ;;
           *.gz)        gunzip $1      ;;
           *.tar)       tar xvf $1     ;;
           *.tbz2)      tar xvjf $1    ;;
           *.tgz)       tar xvzf $1    ;;
           *.zip)       unzip $1       ;;
           *.Z)         uncompress $1  ;;
           *.7z)        7z x $1        ;;
           *)           echo "don't know how to extract '$1'..." ;;
       esac
   else
       echo "'$1' is not a valid file!"
   fi
 }

6

Chỉ cần gõ tar --helpvà có áo của bạn.


12
Nghiêm túc mà nói, bạn đã bao giờ thử đọc trang người đàn ông đó chưa?
deadprogrammer

Nó có thể hơi khó đọc và dài nhưng tôi nghĩ nó hoạt động tốt khi chỉ tìm kiếm tên của một tùy chọn. Bạn cũng có thể grep cho tùy chọn bạn đang tìm kiếm, tức là 'tar --help | trích xuất grep '.
Jeremy Ruten

1
Tuyệt quá. Và sau đó bạn phải lội qua một trang người đàn ông (trong số những thứ bạn đang tìm kiếm) cho bạn biết hàng tấn lệnh streamer cổ xưa và các tùy chọn không có ai ngoại trừ nhà phát triển cần.

2
Tôi thực sự không thấy những gì quá khó khăn về nó. Để giải nén một kho lưu trữ, chỉ cần tìm tùy chọn giải nén và thêm -x vào lệnh của bạn. Nếu bạn muốn nó dài dòng, hãy tìm tùy chọn đó và thêm av để lấy -xv. Sau đó tiếp tục cho đến khi bạn nhận được lệnh chính xác mà bạn muốn. Nó thậm chí có các lệnh ví dụ cho các hoạt động phổ biến.
Jeremy Ruten

1
Jeremy, vấn đề thực sự là bạn có thể không phải lúc nào cũng biết từ vựng thích hợp. Như vậy, thật dễ bị nhầm lẫn và tìm các tùy chọn tương tự và khiến chúng không hoạt động. Sau đó, bạn phải đặt (một số) chúng theo thứ tự thích hợp. Điều này là không tầm thường đối với một người nào đó di chuyển khỏi Windows. Thậm chí nhiều hơn nếu họ không biết kịch bản trong Windows.
Nazadus

3

Nếu bạn gặp khó khăn trong việc ghi nhớ các tùy chọn tar, hãy thử sử dụng đường ống:

  • zcat file.tar.gz | tar xvf -
  • bzcat file.tar.bz2 | tar xvf -

Thay thế tar xvbằng tar tvchỉ xem nội dung của tarball.

Cá nhân, tôi sử dụng các ghi nhớ sau đây:

  • t, x hoặc c cho "lập bảng", "xtracting" hoặc "tạo", tương ứng.
  • v để liệt kê tất cả các tập tin.
  • z, j hoặc không có gì cho tar.gz, tar.bz2 hoặc .tar tương ứng.
  • f để cung cấp tên tệp, so với mặc định sử dụng stdin / stdout hoặc thiết bị băng.

Mặc dù "j" và "bzip2" dường như không liên quan gì đến nhau, tôi thấy thật dễ dàng để nhớ ngoại lệ này.

Ngoài ra, tôi thấy buồn cười khi Googling đã thay thế "man tar".


Bạn nên có thói quen luôn cung cấp ftùy chọn: chỉ gần đây mới có các bản phân phối tar mặc định f -, mặc định lịch sử là f /dev/rmt0hoặc tương tự. Rốt cuộc, tar là băng ARchiver.
ephemient

1
lập bảng gì?
Claudiu


2

Ba hoạt động thường xuyên nhất được sử dụng :

--create -c

Tạo một kho lưu trữ tar mới.

--list -t

Liệt kê nội dung của một kho lưu trữ.

--extract -x

Trích xuất một hoặc nhiều thành viên từ một kho lưu trữ.


Năm hoạt động tar nâng cao :

--append -r

Thêm các mục mới vào một kho lưu trữ đã tồn tại.

--update -u

Thêm các bản sao gần đây của các thành viên lưu trữ vào cuối kho lưu trữ, nếu chúng tồn tại.

--concatenate --catenate -A

Thêm một hoặc nhiều tài liệu lưu trữ có sẵn vào cuối kho lưu trữ khác.

--delete

Xóa các mục khỏi kho lưu trữ (không hoạt động trên băng).

--compare --diff -d

So sánh các thành viên lưu trữ với các đối tác của họ trong hệ thống tệp.



2

Tôi luôn đọc các lệnh trong đầu, trong khi gõ

nén tập tin dài dòng

tar cvzf FILE

giải nén tập tin zip dài dòng

tar xvzf FILE

2

Tôi làm như sau

Để tạo một tar:

tar czvf foo.tar.gz <files to be included>

Để cởi trói:

tar zxvf foo.tar.gz

Đây phải là những công tắc chính bạn cần lo lắng:

c - create
z - compress/uncompress
x - extracte
v - verbose
f - file

Bạn có thể thực hiện một số công cụ fancier như tar và unar inline trong khi bạn đang cố gắng di chuyển các tệp qua các thư mục như vậy:

tar cf - <files to be copied> | (cd <target directory>; tar xvf - )

1

90% thời gian tôi chỉ sử dụng

tar -xvf file.*  

x: giải nén
v: be verbose (tùy chọn)
f: tệp đầu vào (tar, gz, bzip2, v.v ...)

Dễ chứ hả? :)
Sử dụng Fileroller hoặc Ark nếu bạn không ở trong bảng điều khiển.


Cho đến bây giờ, tôi đã sử dụng trình quay phim, nhưng hiện tại tôi không gặp may vì phiên bản tôi sử dụng bộ nhớ 1.1 Gb.
Andrew Grimm

1

Tôi đã sử dụng tập lệnh Perl được gọi là aunpackmột phần của dự án atool trong nhiều năm nay. Vì vậy, bạn chỉ cần chạy: aunpack foo.{zip/tar.gz/tar.bz2}và nó làm điều chính xác dựa trên phần mở rộng tập tin.

Lợi ích khác aunpacklà nó sẽ không gây ô nhiễm thư mục hiện tại với nhiều tệp. Giả sử có 20 tệp foo.zipkhông nằm trong thư mục con. Thay vì đưa các tệp này vào thư mục hiện tại, aunpacksẽ tạo foothư mục con và đặt tất cả các tệp vào đó.


1

Tất cả những gì bạn cần là tar x(trích xuất từ ​​stdin), tar c(tar đến stdout), gzip -c(gzip từ stdin đến stdout; -1đến -9mức nén; tương tự như vậy bzip2) và gunzip -c(gunzip từ stdin đến stdout) - mọi thứ khác đều là đường ống.

Để tar và gzip:

$ tar c * | gzip -c > out.tar.gz

Để giải nén và giải nén

$ gunzip -c < out.tar.gz | tar x

Nếu bạn muốn thanh tiến trình ngọt ngào, hãy sử dụng pv tương tự như con mèo nhưng hiển thị thanh tiến trình:

$ tar c * | bzip2 -c | pv > out.tar.gz
 22.6MiB 0:00:03 [3.64MiB/s] [  <=>                           ]
$ pv in.tar.gz | bunzip2 -c | tar x
   80MiB 0:00:00 [  58MiB/s] [===============================>] 100%

0

Tôi nghĩ rằng nó dễ dàng nghĩ về những gì bạn muốn và không chỉ là một số chữ cái.

Để minh họa, tôi sẽ sử dụng một ví dụ về cách giải nén file.tar.gz:

Vì tập tin tarsasa, bạn nên sử dụng chương trình tar. Sau đó, nó đưa ra các tùy chọn:

  1. x vì bạn muốn e x đường.
  2. z nếu tập tin kết thúc bằng .gz. (gz là sau tar trong tên tệp) Tùy chọn này gunzip lưu trữ.
  3. f cho tập tin theo sau là tên lưu trữ.

Điều này được thể hiện trong ví dụ dưới đây:

tar xzf file.tar.gz

0

Cách tôi nhớ là nó luôn luôn là "tar XXvf", trong đó có hai chữ X

  • x cho e X đường hoặc c cho C reate và,
  • hoặc z = gzip, j = bzip2 (gzip là phổ biến hơn nên thường là z, vì lý do nào đó j = bzip2 chỉ bị mắc kẹt trong đầu tôi).

Thỉnh thoảng bạn chạy vào các tệp nén nhưng không được ghi trong đó bạn thêm un vào bất kỳ kiểu nén nào. ví dụ g un zip hoặc b un zip2.

Nếu có bất cứ điều gì, tôi quên 2 và đôi khi gõ "bzip".


0

bạn cũng có thể tạo một bí danh. chỉ cần thêm hai dòng này vào ~/.bash_aliasestập tin của bạn :

alias untar="tar xvf"
alias dotar="tar cvf"

sau đó bạn có thể sử dụng untar foo.tar.gzđể giải nén và dotar foo.barnén. bạn có thể sử dụng các bí danh khác dễ nhớ cho bạn.


0

C reate Z ip để F ilename

tar -czf myfile.tar.gz myfile.sql

e X đường Z ip với F ilename

tar -xzf myfile.tar.gz
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.