วิธี zip รายการของไฟล์ใน Linux


18

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

ฉันทำ

grep abc file-* > out.txt 

เพื่อสร้างไฟล์ที่มีอินสแตนซ์ทั้งหมดของ "abc" ในแต่ละไฟล์ ฉันต้องการไฟล์ด้วยตัวเอง ฉันจะบอก bash ให้ zip เฉพาะไฟล์เหล่านั้นได้อย่างไร


สัญลักษณ์แทนใช้งานไม่ได้? ทำไม? ถ้าฉันสามารถถาม ...
jherran

@ jherran ฉันไม่ต้องการซิปไฟล์ทั้งหมดในไดเรกทอรีเฉพาะไฟล์ที่ตรงกับคำค้นหา ฉันgrep abc file-* > out.txtทำไฟล์ด้วยอินสแตนซ์ทั้งหมดของ "abc" ในแต่ละไฟล์ ฉันต้องการไฟล์ด้วยตัวเอง
john mangual

@jherran หมายถึงอะไรzip ZipFile.zip file-*ซึ่งเป็นวิธีที่ชัดเจนที่จะทำ คุณจะต้องใช้ไฟล์ระดับกลางเฉพาะในกรณีที่คุณใช้คอมเพล็กซ์findหรือการต่อรายชื่อไฟล์จากการค้นหาที่แตกต่างกัน
AFH

คำตอบ:


32

ง่ายมาก:

zip archive -@ < out.txt

นั่นคือถ้าout.txtไฟล์ของคุณมีชื่อไฟล์หนึ่งชื่อต่อบรรทัด มันจะเพิ่มไฟล์ทั้งหมดจากการเก็บถาวรหนึ่งที่เรียกว่าout.txtarchive.zip

-@ทำให้ตัวเลือกzipอ่านจาก STDIN

หากคุณต้องการข้ามการสร้างout.txtไฟล์ชั่วคราวคุณสามารถใช้grepความสามารถในการพิมพ์ชื่อไฟล์ได้เช่นกัน -rเปิดใช้การค้นหาแบบเรียกซ้ำ (อาจไม่จำเป็นในกรณีของคุณ) และ-lพิมพ์เฉพาะชื่อไฟล์:

grep -rl "abc" file-* | zip archive -@

ทำงานได้ดียกเว้นฉันมีไฟล์รายการที่มีช่องว่างในชื่อไฟล์ ฉันพยายามทั้งสองหลบหนีด้วย `` และไม่หนีพวกเขาหนึ่งครั้งในเครื่องหมายคำพูดและอีกครั้งโดยไม่มีเครื่องหมายคำพูดรอบชื่อไฟล์ (หนึ่งบรรทัด - หนึ่งชื่อไฟล์) ไม่มีอะไรทำงานจนถึง
Thomas W.

2
ฉันทำให้มันทำงานกับ `` `` `` '' '' '' '' '' '' '' '' '' '' '' - '- เว้นช่องว่างที่เงียบสงบและไม่มีเครื่องหมายคำพูดในไฟล์และต่อไปนี้:cat out.txt | while read line ; do xargs zip archive.zip $line ; done
โธมัส W.

ถ้าคุณต้องการซิปไฟล์ที่มีชื่อคล้ายกันคุณสามารถลองได้zip archive.zip $(ls common_name*)
chepe263

@ chepe263 สิ่งนี้จะแตกถ้าไฟล์มีช่องว่างในเส้นทาง โดยทั่วไปไม่แนะนำให้แยกเอาท์พุท ls
slhck

สำหรับคนอื่น ๆ บน mac ที่ได้รับความอนุเคราะห์จากการจัดทำดัชนีของเครื่องมือค้นหา-@ไวยากรณ์ตัวเลือกจะใช้งานได้ดีตั้งแต่ 10.16 ถึงแม้ว่าหน้า man ยังคงมีภาษาเกี่ยวกับnot on MacOS
Aidan Miles

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