ฉันต้องการ zip หลายโฟลเดอร์ในโครงสร้างไดเรกทอรีเช่นนี้
V-
something.txt
folder
folder
g.jpg
h.jar
เมื่อฉันพยายาม zip มันจะเป็นการสร้างไฟล์ zip ที่มีโฟลเดอร์ v แทนเนื้อหาของมัน (ไดเรกทอรีย่อยและไฟล์)
ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร
ฉันต้องการ zip หลายโฟลเดอร์ในโครงสร้างไดเรกทอรีเช่นนี้
V-
something.txt
folder
folder
g.jpg
h.jar
เมื่อฉันพยายาม zip มันจะเป็นการสร้างไฟล์ zip ที่มีโฟลเดอร์ v แทนเนื้อหาของมัน (ไดเรกทอรีย่อยและไฟล์)
ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร
คำตอบ:
ดังนั้นหากฉันเข้าใจถูกต้องคุณกำลังพยายามเก็บถาวรไฟล์ & โฟลเดอร์ในโฟลเดอร์เฉพาะ แต่ไม่รวมโฟลเดอร์รูท
ตัวอย่าง:
/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;
for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zip -r test.zip test/*
ไม่ทำงาน มีวิธีที่ถูกต้องเพื่อให้บรรลุนี้จากนอกไดเรกทอรีหรือไม่
ใช้-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).
แล้วคำสั่งนี้ล่ะ?
$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
cd
แต่ฉันไม่ชอบมันเพราะมันเกี่ยวข้องกับ หวังว่าจะมีวิธีในการระบุเส้นทางที่เก็บไว้อย่างแม่นยำมากขึ้น
หวังว่านี่จะช่วยได้
(cd directory && zip -r ../out.zip .)
มันเก็บเปลือกหลักในไดเรกทอรีเดียวกันและการเปลี่ยนไดเรกทอรีของเปลือกย่อยที่ตายหลังจากคำสั่ง