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


12

ฉันมีโฟลเดอร์ที่มีหลายไฟล์

โฟลเดอร์

  • artifact1.app
  • artifact2.ext2
  • artifact3.ext3
  • ...

เป้าหมายของฉันคือการซิปไฟล์จากนอกโฟลเดอร์นี้ (ดังนั้นโดยไม่ต้องใช้cdคำสั่ง) โดยไม่รวมโฟลเดอร์ dir

zip -r ./folder/artifact.zip ./folder/artifact1.app

คำสั่งนี้รวมถึงโฟลเดอร์ dir ในรหัสไปรษณีย์สุดท้าย คำใบ้ใด ๆ

คำถามที่เกี่ยวข้อง: ซิปเนื้อหาของโฟลเดอร์โดยไม่ต้องรวมโฟลเดอร์เอง


1
ดูเหมือนว่า-jจะนำมาใช้เพียงอย่างเดียวเท่านั้นและนั่นบีบอัดโฟลเดอร์ทั้งหมดลงในไดเรกทอรีระดับรากเดียวภายใน ZIP นั่นไม่ใช่สิ่งที่คุณกำลังมองหาใช่ไหม?
phyrfox

@phyrfox อาจจะใช่ จำเป็นต้องตรวจสอบมัน ขอบคุณ
Lorenzo B

คำตอบ:


13

หากคุณต้องการจัดเก็บไฟล์ทั้งหมดในfolderชื่อโดยไม่มีการระบุไดเรกทอรีคุณสามารถใช้-jตัวเลือก

zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3

หรือ

zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}

หากคุณมีไฟล์ในไดเรกทอรีย่อยพวกเขาจะไม่ได้มีองค์ประกอบไดเรกทอรีใด ๆ ในการเก็บอย่างใดอย่างหนึ่งเช่นจะถูกเก็บไว้ในที่เก็บถาวรเป็นfolder/subdir/foofoo

แต่มันอาจจะง่ายกว่าที่จะเปลี่ยนเป็นไดเรกทอรี มันเกือบจะเท่ากับจำนวนการพิมพ์ที่เหมือนกันกับวิธีวงเล็บปีกกา ถ้าคุณทำเช่นว่าถ้าคุณรวมถึงไฟล์ในไดเรกทอรีย่อยพวกเขาจะมีทางญาติของพวกเขาจากไดเรกทอรีที่คุณเปลี่ยนไปเช่นจะถูกเก็บไว้เป็นfolder/subdir/foosubdir/foo

(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)

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

pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd

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


คุณไม่จำเป็นต้องแสดงรายการไฟล์ทั้งหมดในไดเรกทอรีย่อย ( folder) อย่างชัดเจนคุณสามารถใช้สัญลักษณ์แทนได้เช่นzip -j folder/*
Jakub Kukul

การใช้การขยายเชลล์หมายความว่า dotfiles (เช่น.profile) จะไม่รวมอยู่ในไฟล์เก็บถาวร ให้เปลี่ยนไดเร็กทอรีการทำงานปัจจุบันและระบุ.เป็นไฟล์ที่จะถูกเก็บถาวร:cd folder && zip -r ../folder.zip .
sheldonh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.