มีวิธีแก้ไขไฟล์ในไฟล์ zip โดยไม่แตกไฟล์ออกมาก่อนหรือไม่?


47

บางครั้งฉันจำเป็นต้องทำการเปลี่ยนแปลงไฟล์. zip หรือ. jar ดังนั้นฉันมักจะย้ายไฟล์ไปที่/tmpแตกไฟล์ทั้งหมดด้วยunzipแก้ไขไฟล์ไม่กี่ไฟล์จากนั้นซิปไฟล์ซ้ำอีกครั้ง ใช้งานได้ แต่มันน่าเบื่อ มียูทิลิตี้หรือสคริปต์เชลล์ที่ฉันสามารถใช้เพื่อแก้ไขไฟล์ในไฟล์ zip โดยไม่ต้องโทรออกอย่างชัดเจนunzipและzip(แม้ว่าจะเป็นเพียง wrapper รอบคำสั่งเหล่านี้)?


แค่อยากรู้ว่าคำตอบใช้ได้กับไฟล์. jar หรือไม่ (ฉันไม่ได้ทดสอบที่นั่น)
beroe

@beroe เนื่องจากควรใช้อัลกอริทึมการบีบอัดรหัสไปรษณีย์ นั่นคือแรงจูงใจหลักของฉันในการมองหาวิธีแก้ปัญหาเพราะฉันมีไฟล์. war ติดตั้งบนเซิร์ฟเวอร์แอพที่ฉันไม่รู้สึกว่าบรรจุไฟล์ซ้ำและปรับใช้เพียงเพื่อแก้ไขไฟล์เดียว
austin

ยิ่งใหญ่ ฉันจะพยายามแก้ไขฟังก์ชั่นเพื่อให้มันรักษาโครงสร้างไดเรกทอรีภายในไฟล์เก็บถาวร ขณะนี้ฉันคิดว่ามันใช้ได้กับไฟล์ที่ระดับรูทเท่านั้น แต่สำหรับจุดประสงค์ของฉันโฟลเดอร์ย่อยจะมีประโยชน์มากกว่า
beroe

@beroe มันเจ๋งดี ก่อนที่จะถามเรื่องนี้ฉันจะเขียนโค้ดไพ ธ อนเพื่อเรียกใช้ psudo-shell "ข้างใน" ไฟล์ zip เพื่อเรียกใช้คำสั่งโดยพลการ ฉันจะสนใจสิ่งที่คุณเกิดขึ้น
austin

ตกลงเพิ่มโซลูชันอื่นเพื่อสนับสนุนโฟลเดอร์ย่อยและทำงานในการทดสอบที่จำกัด
beroe

คำตอบ:


19

คุณรู้จักชื่อไฟล์ในไฟล์เก็บถาวรก่อนที่จะแตกไฟล์หรือไม่ คุณสามารถสร้างฟังก์ชั่นเพื่อคลายซิปเพื่อ/tmpแก้ไขและรีเฟรช zip:

zipedit(){
    echo "Usage: zipedit archive.zip file.txt"
    unzip "$1" "$2" -d /tmp 
    vi /tmp/$2 && zip -j --update "$1"  "/tmp/$2" 
}

ตามที่กล่าวไว้การใช้งานคือ:

zipedit myarchive.zip myfile.txt

วิธีนี้คลายไฟล์ที่ระบุชื่อจากไฟล์เก็บถาวรบันทึกลง/tmpในแก้ไขไฟล์viจากนั้นเพิ่มไฟล์กลับไปยังไฟล์เก็บถาวรขณะที่ "junking" พา ธ เพิ่ม. bash_profile ของคุณโดยสมมติว่าbash...

แก้ไข:ด้านล่างเป็นรุ่นที่ทำงานร่วมกับโฟลเดอร์ย่อยภายในที่เก็บถาวร ... หมายเหตุอย่าใช้เครื่องหมายทับหน้าชื่อโฟลเดอร์ (เช่นใช้งานmyfolder/file.txtไม่ได้/myfolder/file.txt) หากคุณแก้ไขไฟล์ที่ไม่มีอยู่ในไฟล์เก็บถาวรมันจะสร้างให้คุณ ยังไม่แน่ใจว่ามันจะทำงานกับพา ธ สัมบูรณ์ไปยังไฟล์ zip หรือไม่ ดีที่สุดติดกับญาติ

zipedit(){
    echo "Usage: zipedit archive.zip folder/file.txt"
    curdir=$(pwd)
    unzip "$1" "$2" -d /tmp 
    cd /tmp
    vi "$2" && zip --update "$curdir/$1"  "$2" 
    # remove this line to just keep overwriting files in /tmp
    rm -f "$2" # or remove -f if you want to confirm
    cd "$curdir"
}

ขอบคุณสำหรับคำถาม ฉันอาจจะลงเอยด้วยการใช้อันนี้ด้วย!

การแก้ไขอื่น: ยังไม่ทดลอง แต่ฉันอ่านแล้วvimและemacsจะแก้ไขไฟล์ jar โดยตรงหรือไม่


ฉันสามารถยืนยันได้ว่าเสียงเรียกเข้านั้นยอดเยี่ยมสำหรับการแก้ไขไฟล์ซิปจากบรรทัดคำสั่งบน Linux ขอบคุณมากสำหรับคำแนะนำ!
โทมัสบินด์ซัส

59

Vim รองรับการแก้ไขไฟล์อย่างโปร่งใสภายในไฟล์ zip เพิ่งดำเนินการ:

vim file.zip

และคุณจะเห็นรายการไฟล์ภายในไฟล์ zip เลือกรายการที่คุณต้องการแก้ไขเปลี่ยนสิ่งที่คุณต้องการและออกด้วย: x

หากvimตอบกลับด้วย:

ไม่สามารถเปลี่ยนแปลงได้ 'แก้ไขได้' ปิดอยู่

.. เพียงแค่เรียกใช้:set modifiableหรือ:set ma(ที่มา: https://stackoverflow.com/questions/5745506/vim-modifiable-is-off )


2
อย่างไรก็ตามการสนับสนุน zip เริ่มต้นในกลุ่มจะอนุญาตให้แก้ไข ZIP ระดับเดียวเท่านั้น หากคุณต้องการแก้ไข ZIP ภายใน ZIPs คุณควรใช้โปรแกรมเสริมนี้
jesjimher

1
เช่นเดียวกับ emacs
Mike

4
ควรทำเครื่องหมายเป็นคำตอบที่ถูกต้อง
Martijn Burger

3
ช่วยชีวิต ฟีเจอร์ที่เจ๋งมาก ๆ และค่อนข้างคาดไม่ถึงเช่นกัน
Peter Perháč

4

คำตอบสั้น ๆ : ไม่

หากเป็น wrapper คุณกำลังเรียกคำสั่งเหล่านี้ อย่างไรก็ตามสิ่งที่ดีที่สุดที่ฉันนึกได้ก็คือเปิดไฟล์โดยใช้file-rollerหากคุณอยู่ในสภาพแวดล้อม X ซึ่งอาจทำงานได้ด้วยการดับเบิลคลิกง่ายขึ้นอยู่กับการตั้งค่าของคุณ จากนั้นคุณสามารถดับเบิลคลิกที่ไฟล์บีบอัดเพื่อเปิดและจากนั้นคุณสามารถแก้ไขได้:

$ file-roller b3.zip 

เมื่อคุณบันทึกไฟล์ที่แก้ไขคุณควรได้รับกล่องโต้ตอบนี้:

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

ป้อนคำอธิบายรูปภาพที่นี่


0

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

หากคุณใช้ทฤษฎีน้อยกว่ามีประโยชน์มากกว่า "ฉันไม่ต้องการเปิดเครื่องรูด / รูดซิปด้วยตนเอง" มีเครื่องมือที่คุณสามารถใช้ได้ arkบน Linux เป็นหนึ่งที่ฉันเคยใช้ คุณสามารถเมานการจัดเก็บลงสื่อถาวรด้วยfuse-zipได้แม้ว่าอาจจะทำงานได้ดีกว่าไฟล์ชั่วคราว


ไม่รู้ว่าทำไมใครบางคนให้ -1 +1 fuse-zipสำหรับ
myrdd

0

ตามหน้า man สำหรับzip(เวอร์ชันออนไลน์สำหรับการอ้างอิงง่าย ๆ : http://linux.die.net/man/1/zip ) zipคำสั่งมีการ-uตั้งค่าสถานะซึ่งอธิบายเป็น:

แทนที่ (อัพเดต) รายการที่มีอยู่ในไฟล์เก็บถาวร zip เฉพาะเมื่อมีการแก้ไขมากกว่าเวอร์ชันที่มีอยู่แล้วในไฟล์เก็บถาวร zip เท่านั้น


0

ตัวจัดการไฟล์ Directory Opus 12 จะช่วยให้คุณสามารถเรียกดู Zip จากนั้นลากและวางไฟล์ที่แก้ไขจากโฟลเดอร์อื่นลงไปแล้วเขียนทับไฟล์ที่คุณต้องการแก้ไขและจะทำทุกอย่างได้อย่างรวดเร็ว ง่ายมาก


0

ฉันเขียนปลั๊กอิน Vim ที่ขยาย stock zip.vim เพื่อเรียกดูและแก้ไขไฟล์ zip ที่ซ้อนกัน

https://github.com/lbrayner/vim-rzip


คุณจะติดตั้งสิ่งนี้บน linux ได้อย่างไร?
Pandrei

ผมเพิ่มคำแนะนำการติดตั้งเพื่อ README ของพื้นที่เก็บข้อมูล โปรดตรวจสอบอีกครั้ง
lbrayner

0

คุณสามารถใช้โปรแกรมแก้ไขข้อความมาตรฐาน KDE ตัวอย่างเช่น:

  1. เปิดที่เก็บถาวรในตัวจัดการเก็บถาวร
  2. เปิดไฟล์ข้อความในโปรแกรมแก้ไข KDE gui
  3. บันทึกไฟล์ข้อความและระบบขอให้คุณรีเฟรชไฟล์เก็บถาวร - คลิกใช่
  4. อย่าลืมสิทธิ์ในการจัดเก็บและโฟลเดอร์เก็บถาวร (ความผิดพลาดที่ฉันโปรดปราน)

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