Máy vắt


19

Với số lượng định dạng tệp lưu trữ / nén ngày càng tăng , có một công cụ dòng lệnh miễn phí / nguồn mở nào để thống trị tất cả không? Có lẽ một cái gì đó với một bộ cờ nhất quán / thống nhất? (lưu ý tham chiếu ngầm thân thiện của tôi với tar )

Tôi đã từng chạy vào một tập các bí danh có nghĩa là đơn giản hóa phần lớn nhiệm vụ nén / khử các tệp với các ràng buộc tarvà các tiện ích khác, nhưng tôi không thể tìm thấy điều này nữa.

Cập nhật: Làm cách nào tôi có thể định cấu hình một cái gì đó như atoolkhông sử dụng unzipđể trích xuất các tệp zip (dường như không thể xử lý các tệp lớn hơn 4GB) và gunzipthay vào đó để sử dụng ?

$ aunpack large_file.zip
error:  Zip file too big (greater than 4294959102 bytes)
Archive:  large_file.zip
warning [large_file.zip]:  1491344848 extra bytes at beginning or within zipfile
  (attempting to process anyway)
error [large_file.zip]:  start of central directory not found;
  zipfile corrupt.
  (please check that you have transferred or created the zipfile in the
  appropriate BINARY mode and that you have compiled UnZip properly)
aunpack: unzip ...: non-zero return-code

1
nhưng một giải pháp: packages.qa.debian.org/u/unp.html
frostschutz

@frostschutz. Bạn có biết nếu có bất cứ điều gì có thể làm cho unpackkhác biệt atool?
Amelio Vazquez-Reina

Dunno. Như câu trả lời của Evan cho thấy, một chương trình như vậy khá tầm thường. Sử dụng bất cứ điều gì làm việc cho bạn. Đối với giải nén tập tin zip, sở thích cá nhân của tôi là 7z.
frostschutz

1
@ user815423426 Tôi đã thêm hướng dẫn cho câu hỏi cập nhật của bạn vào câu trả lời hiện có của tôi.
SuperMagic

Câu trả lời:


17

Tôi sử dụng atool . Nó làm công việc. Nó hoạt động với nhiều, mặc dù không phải tất cả các định dạng:

tar, gzip, bzip2, bzip, lzip, lzop, lzma, zip, rar, lha, arj, arc, p7zip, v.v.

Những công cụ nén này vẫn cần thiết, mặc dù atool chỉ đơn giản là một mặt trước cho chúng.

Tôi đặc biệt thích alslệnh mà nó cung cấp liệt kê nội dung của bất kỳ định dạng lưu trữ được hỗ trợ nào.

Lệnh chính atoolsử dụng các cờ riêng để trích xuất tài liệu lưu trữ (chuyển các cờ thích hợp cho các công cụ trích xuất cơ bản cụ thể).

Ồ, và đó là trong kho của một số bản phân phối (Fedora trong trường hợp của tôi, mặc dù khi tôi nhớ lại, khi tôi sử dụng Ubuntu thì nó không có trong kho của họ. Và tôi đã cài đặt từ tarball.).

Cập nhật về kho lưu trữ : atool nằm trong kho của các bản phân phối sau (chỉ các bản phát hành hiện tại được kiểm tra):

  • Fedora
  • Debian (cảm ơn @terdon, và, có lẽ, đó là các dẫn xuất như Ubuntu)
  • Ubuntu (qed, và, có lẽ là các dẫn xuất như Mint)
  • Mở Suse
  • CentOS (và, có lẽ là, RHEL)
  • Arch Linux

Tôi chắc chắn có những người khác ... hợp lý, phân phối hiện đại nhất.

Trả lời cho Câu hỏi được cập nhật "Làm cách nào tôi có thể định cấu hình một cái gì đó như atool để không sử dụng giải nén để giải nén các tệp zip ... và sử dụng gunzip thay thế" :

Chỉnh sửa tập tin cấu hình atool ~/.atoolrcvà thêm dòng:

path_unzip /usr/bin/gunzip

với đường dẫn chính xác đến chương trình gunzip của bạn.

Xem trang man để biết danh sách đầy đủ các biến có thể bạn có thể đặt trong tệp cấu hình này, trong đó có rất nhiều . Nếu các tùy chọn dòng lệnh cần thiết cho gunzip khác với giải nén, bạn có thể phải tự sửa đổi nguồn atool (perl).


Cảm ơn. Điều này có vẻ tuyệt vời. Bạn có biết, ngoài việc có thể tải xuống tarball, còn có một kho (git / bzr) cho nó, hoặc có lẽ cho một ngã ba của nó không?
Amelio Vazquez-Reina

Dường như không có một repo git cho nó. Có một, rùng mình, cvs repo: savannah.nongnu.org/cvs/?group=atool . Tuy nhiên, nguồn là trong tarball và công cụ được viết bằng perl, do đó bạn hoặc bất kỳ ai cảm thấy sự thôi thúc dễ dàng sửa đổi.
SuperMagic

1
@ user815423426 nó cũng nằm trong kho của Debian.
terdon

9

Đây là một chức năng shell nhỏ chăm sóc một số loại lưu trữ.

extract () {
    if [ ! -f "$1" ] ; then
        echo "'$1' does not exist."
        return 1
    fi

    case "$1" in
        *.tar.bz2)   tar xvjf "$1"   ;;
        *.tar.xz)    tar xvJf "$1"   ;;
        *.tar.gz)    tar xvzf "$1"   ;;
        *.bz2)       bunzip2 "$1"    ;;
        *.rar)       rar x "$1"      ;;
        *.gz)        gunzip "$1"     ;;
        *.tar)       tar xvf "$1"    ;;
        *.tbz2)      tar xvjf "$1"   ;;
        *.tgz)       tar xvzf "$1"   ;;
        *.zip)       unzip "$1"      ;;
        *.Z)         uncompress "$1" ;;
        *.xz)        xz -d "$1"      ;;
        *.7z)        7z x "$1"       ;;
        *.a)         ar x "$1"       ;;
        *)           echo "Unable to extract '$1'." ;;
    esac
}

Tôi tìm thấy phiên bản gốc của chức năng này ở đâu đó trực tuyến và sửa đổi nó một chút để trích xuất artài liệu lưu trữ và xz tarlưu trữ nén .


Điều này có vẻ tuyệt vời. Đây có phải là cho bash?
Amelio Vazquez-Reina

Tôi chỉ thử nghiệm điều này với bashzsh, nhưng nó cũng hoạt động với sh.

Điều này là đặc biệt thẩm mỹ cho một chức năng vỏ. Một lưu ý là bạn muốn đảm bảo rằng bạn đã cài đặt tất cả các tệp nhị phân có liên quan hoặc xóa các dòng cho những người bạn chưa cài đặt.
bgvaughan

3

Hệ thống tệp AVFS trình bày một khung nhìn của hệ thống tệp trong đó mọi tệp lưu trữ (ví dụ /path/to/foo.zip) có thể truy cập dưới dạng thư mục ( ~/.avfs/path/to/foo/zip#ví dụ này). AVFS cung cấp quyền truy cập chỉ đọc vào hầu hết các định dạng tệp lưu trữ phổ biến.

mountavfs
cp -Rp ~/.avfs$PWD/large_file.zip\# extraction_directory

Avfs sử dụng các trình trợ giúp bên ngoài có thể dễ dàng cấu hình bằng cách chỉnh sửa các tệp trong /usr(không may là không có cách nào để avfs 1.0 sử dụng các tệp trong /usr/localhoặc trong thư mục chính của bạn, bạn cần chỉnh sửa các tệp trong /usrhoặc biên dịch lại). /usr/share/avfs/extfs/ext-uziplà tập lệnh để xử lý .zipcác tập tin, thay đổi nó nếu bạn không muốn sử dụng /usr/bin/unzip. Thay vào đó, bạn có thể thoát khỏi việc sử dụng 7z: thử chỉnh sửa /usr/share/avfs/extfs/extfs.inivà thay đổi dòng ext-uzipthành u7z .zip.

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.