เครื่องสกัดอเนกประสงค์


19

ด้วยจำนวนที่เพิ่มขึ้นของรูปแบบไฟล์เก็บถาวร / ไฟล์บีบอัดมีเครื่องมือบรรทัดคำสั่งฟรี / โอเพนซอร์สเดียวที่ใช้ควบคุมกฎทั้งหมดหรือไม่ บางทีสิ่งที่มีชุดของธงที่สอดคล้องกัน / รวมกัน? (บันทึกการอ้างอิงโดยนัยของฉันที่เป็นมิตรกับ tar )

ฉันเคยพบเจอในนามแฝงชุดหนึ่งซึ่งหมายถึงการลดความซับซ้อนของงานการบีบอัด / ยกเลิกการบีบอัดไฟล์ด้วยการเชื่อมโยงtarและอุปกรณ์อื่น ๆ แต่ฉันไม่สามารถหามันได้อีกต่อไป

อัปเดต: ฉันจะกำหนดค่าบางอย่างatoolที่ไม่ต้องการใช้unzipเพื่อแยกไฟล์ zip (ซึ่งเห็นได้ชัดว่าไม่สามารถจัดการไฟล์ที่มีขนาดใหญ่กว่า 4GB) และใช้gunzipแทนได้อย่างไร

$ 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
วิธีแก้ปัญหาอื่น: packages.qa.debian.org/u/unp.html
frostschutz

@frostschutz คุณรู้หรือไม่ว่ามีสิ่งใดที่อาจunpackแตกต่างไปจากatoolนี้
Amelio Vazquez-Reina

dunno ดังคำตอบของอีวานแสดงให้เห็นว่าโปรแกรมดังกล่าวค่อนข้างน่ารำคาญ ใช้อะไรก็ได้ที่เหมาะกับคุณ สำหรับการเปิดออกไฟล์ซิป, 7zการตั้งค่าส่วนตัวของฉันคือ
frostschutz

1
@ user815423426 ฉันได้เพิ่มคำแนะนำสำหรับคำถามที่อัปเดตของคุณไปยังคำตอบที่มีอยู่
SuperMagic

คำตอบ:


18

ฉันใช้atool มันทำงานได้ดี มันใช้งานได้กับหลาย ๆ รูปแบบ แต่ไม่ใช่ทุกรูปแบบ:

น้ำมันดิน, gzip, bzip2, bzip, lzip, lzop, lzma, zip, rar, lha, arj, arc, p7zip เป็นต้น

เครื่องมือบีบอัดเหล่านี้ยังคงมีความจำเป็นแม้ว่า atool เป็นเพียงส่วนหน้าสำหรับพวกเขา

ฉันชอบalsคำสั่งโดยเฉพาะซึ่งแสดงรายการเนื้อหาของรูปแบบไฟล์เก็บถาวรที่สนับสนุน

atoolคำสั่งหลักใช้แฟล็กของตัวเองสำหรับการแยกไฟล์เก็บถาวร (ส่งผ่านแฟล็กที่เหมาะสมไปยังเครื่องมือการดึงข้อมูลพื้นฐานที่เฉพาะเจาะจง)

โอ้และมันอยู่ในที่เก็บของบางแห่ง (Fedora ในกรณีของฉันแม้ว่าในขณะที่ฉันจำได้ว่าเมื่อฉันใช้ Ubuntu ก็ไม่ได้อยู่ใน repos ของพวกเขาแล้วฉันติดตั้งจาก tarball)

อัปเดตเกี่ยวกับที่เก็บ : atool อยู่ในที่เก็บต่อไปนี้ของดิสทริบิวชัน (การตรวจสอบรุ่นปัจจุบันเท่านั้น):

  • Fedora
  • Debian (ขอบคุณ @terdon และน่าจะเป็นอนุพันธ์ของ Ubuntu)
  • อูบุนตู (qed และสันนิษฐานว่าเป็นอนุพันธ์เช่นมิ้นต์)
  • เปิด Suse
  • CentOS (และน่าจะเป็น RHEL)
  • Arch Linux

ฉันแน่ใจว่ามีคนอื่น ... เป็นไปได้การแจกแจงที่ทันสมัยที่สุด

คำตอบสำหรับคำถามที่อัปเดต "ฉันจะกำหนดค่าบางอย่างเช่น atool เพื่อไม่ใช้ unzip เพื่อแยกไฟล์ zip ได้อย่างไรและใช้ gunzip แทน" :

แก้ไขไฟล์ atool config ~/.atoolrcและเพิ่มบรรทัด:

path_unzip /usr/bin/gunzip

ด้วยเส้นทางที่ถูกต้องไปยังโปรแกรม gunzip ของคุณ

ดูหน้าคนสำหรับรายการที่สมบูรณ์ของตัวแปรที่เป็นไปได้คุณสามารถวางไว้ในไฟล์ config นี้ซึ่งมีอยู่เป็นจำนวนมาก หากตัวเลือกบรรทัดคำสั่งที่จำเป็นสำหรับ gunzip นั้นแตกต่างจาก unzip คุณอาจต้องแก้ไข atool source (perl) เอง


ขอบคุณ มันดูดีมาก คุณรู้หรือไม่ว่านอกเหนือจากความสามารถในการดาวน์โหลด tarball แล้วยังมีที่เก็บ (git / bzr) สำหรับมันหรืออาจเป็นทางแยกของมัน?
Amelio Vazquez-Reina

ดูเหมือนจะไม่มี repo คอมไพล์สำหรับมัน มีตัวสั่นเทาcvs repo: savannah.nongnu.org/cvs/?group=atool อย่างไรก็ตามแหล่งข้อมูลนั้นอยู่ใน tarball และเครื่องมือเขียนด้วยภาษา Perl คุณสามารถแก้ไขได้โดยง่ายหรือใครก็ตามที่รู้สึกอยากได้
SuperMagic

1
@ user815423426 มันยังอยู่ใน repos Debian
terdon

9

นี่คือฟังก์ชั่นเชลล์เล็ก ๆ ที่ดูแลประเภทไฟล์เก็บถาวรหลายประเภท

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
}

ฉันพบรุ่นดั้งเดิมของฟังก์ชั่นนี้ออนไลน์และแก้ไขมันเล็กน้อยเพื่อแยกarคลังเก็บและtarคลังเก็บบีบอัด xz


มันดูดีมาก นี่สำหรับทุบตีหรือไม่
Amelio Vazquez-Reina

ฉันเพิ่งทดสอบสิ่งนี้ด้วยbashและzshแต่ก็ควรใช้งานได้shเช่นกัน

นี่เป็นที่ชื่นชอบอย่างยิ่งสำหรับฟังก์ชันเชลล์ หนึ่งข้อแม้คือว่าคุณต้องการให้แน่ใจว่าคุณได้ติดตั้งไบนารีที่เกี่ยวข้องทั้งหมดหรือลบบรรทัดสำหรับสิ่งที่คุณไม่ได้ติดตั้ง
bgvaughan

3

AVFSระบบแฟ้มนำเสนอมุมมองของระบบแฟ้มที่ทุกไฟล์ที่เก็บถาวร (เช่น/path/to/foo.zip) สามารถเข้าถึงได้เป็นไดเรกทอรี ( ~/.avfs/path/to/foo/zip#สำหรับตัวอย่างนี้) AVFS จัดให้มีการเข้าถึงไฟล์เก็บถาวรที่พบได้บ่อยแบบอ่านอย่างเดียว

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

Avfs ใช้ตัวช่วยภายนอกซึ่งสามารถกำหนดค่าได้อย่างง่ายดายโดยการแก้ไขไฟล์ใน/usr(น่าเสียดายที่ avfs 1.0 ไม่มีวิธีการใช้ไฟล์ใน/usr/localหรือในโฮมไดเร็กตอรี่ของคุณคุณต้องแก้ไขไฟล์ใน/usrหรือคอมไพล์ใหม่) /usr/share/avfs/extfs/ext-uzipเป็นสคริปต์ที่จะจัดการกับไฟล์เปลี่ยนถ้าคุณไม่ต้องการที่จะใช้.zip /usr/bin/unzipคุณอาจจะสามารถที่จะได้รับไปกับการใช้ 7z แทน: ลองแก้ไข/usr/share/avfs/extfs/extfs.iniและเปลี่ยนสายไปext-uzipu7z .zip

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.