บีบอัดไฟล์เก็บถาวรโดยไม่รวมไดเรกทอรีหลัก


30

ฉันต้องการ zip หลายโฟลเดอร์ในโครงสร้างไดเรกทอรีเช่นนี้

V-
 something.txt
 folder
 folder
 g.jpg
 h.jar

เมื่อฉันพยายาม zip มันจะเป็นการสร้างไฟล์ zip ที่มีโฟลเดอร์ v แทนเนื้อหาของมัน (ไดเรกทอรีย่อยและไฟล์)

ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร

คำตอบ:


23

ดังนั้นหากฉันเข้าใจถูกต้องคุณกำลังพยายามเก็บถาวรไฟล์ & โฟลเดอร์ในโฟลเดอร์เฉพาะ แต่ไม่รวมโฟลเดอร์รูท

ตัวอย่าง:

/test/test.txt
/test/test2.txt

ที่ test.txt และ test2.txt จะถูกเก็บไว้ใน zip แต่ไม่ / test /

คุณสามารถ cd ลงใน / test / directory แล้วเรียกใช้บางอย่างเช่น

zip -r filename.zip ./*

ซึ่งจะสร้างไฟล์เก็บถาวรในโฟลเดอร์เดียวกันกับชื่อ filename.zip หรือถ้าเรียกใช้จากนอกโฟลเดอร์คุณสามารถเรียกใช้

zip -r test.zip test/*

กระบวนการ / * เป็นส่วนที่รวมเฉพาะเนื้อหาของโฟลเดอร์แทนทั้งโฟลเดอร์

แก้ไข: OP ต้องการรหัสไปรษณีย์หลายอันวิธีแก้ปัญหาก็คือการแฮ็คฉันอยากรู้ว่ามีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่

for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;

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

1
ตกลงฉันรันสคริปต์และมันสร้างไดเรกทอรีหลักในไฟล์เก็บถาวรฉันต้องการเฉพาะเนื้อหาของโฟลเดอร์ที่จะอยู่ในไฟล์เก็บถาวร
Dami

1
ความผิดพลาดของฉันพลาดไปเล็กน้อย เพิ่มพารามิเตอร์ -j ซึ่งฉันเพิ่งค้นหาดูเหมือนจะข้ามส่วนที่คุณไม่ต้องการ ลองนี้:for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zzbomb

18
zip -r test.zip ทดสอบ / * จากด้านนอกเพิ่มการทดสอบเป็นไดเรกทอรีลงในไฟล์ zip
smihael

4
ตามที่ @smihael ระบุว่าzip -r test.zip test/*ไม่ทำงาน มีวิธีที่ถูกต้องเพื่อให้บรรลุนี้จากนอกไดเรกทอรีหรือไม่
andrhamm

22

ใช้-jหรือ--junk-pathsตัวเลือกในคำสั่ง zip ของคุณ

จากหน้าคนซิป :

-j

--junk-paths

Store just the name of a saved file (junk the path), and do not store directory 
names. By default, zip will store the full path (relative to the current 
directory).

นี่ดูเหมือนจะเป็นคำตอบที่ถูกต้อง
mutant_city

3
สิ่งที่เกี่ยวกับเส้นทาง / โฟลเดอร์ซ้อนกันอย่างไร
GuyPaddock

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

17

แล้วคำสั่งนี้ล่ะ?

$ cd somedir ; zip -r ../zipped.zip . * ; cd ..

5
แม้ว่าคำตอบนี้จะเป็นคำตอบที่ถูกต้อง แต่การแนะนำก็ไม่เหมือนที่คุณเชื่อ มันจะช่วยอธิบายเล็กน้อยว่าคำสั่งทำอะไร
Nephente

1
นี่เป็นวิธีการแก้ปัญหาของฉันเกินไป cdแต่ฉันไม่ชอบมันเพราะมันเกี่ยวข้องกับ หวังว่าจะมีวิธีในการระบุเส้นทางที่เก็บไว้อย่างแม่นยำมากขึ้น
nilskp

3

หวังว่านี่จะช่วยได้

(cd directory && zip -r ../out.zip .)

มันเก็บเปลือกหลักในไดเรกทอรีเดียวกันและการเปลี่ยนไดเรกทอรีของเปลือกย่อยที่ตายหลังจากคำสั่ง


ฉันต้องการเพิ่มสิ่งนี้เป็นความคิดเห็นในคำตอบของ@Alfred UCแต่ฉันไม่มีชื่อเสียงเพียงพอสำหรับสิ่งนั้น
Kenneth

หากจริงแก้ปัญหาแล้วมันอาจจะเป็นทางออก
Yufenyuy Veyeh Dider

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