วิธีการยกเว้นไฟล์จากการเก็บถาวร TAR โดยใช้การแสดงออกปกติ?


10

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

ตัวอย่างของไฟล์ที่จะยกเว้นคือ: 68x640X480.jpg

ฉันได้ลองทำสิ่งนี้โดยไม่มีโชค:

tar cvf test.tar --exclude=[0-9]+x[0-9X]+\.jpg /data/foto

ใครช่วยได้บ้าง

คำตอบ:


11

คุณสามารถใช้เครื่องมือเพิ่มเติมบางอย่างเช่นfindและegrep:

find directory/ -type f -print | egrep -v '[0-9]+x[0-9X]+\.jpg' | tar cvfz directory.tar.gz -T -

ข้อเสียของวิธีการดังกล่าวข้างต้นคือจะไม่ทำงานกับชื่อไฟล์ที่เป็นไปได้ทั้งหมด โอกาสอีกประการหนึ่งคือการใช้ฟังก์ชั่นการยกเว้นในตัวของtar:

tar -czvf directory.tar.gz --exclude='*x*X*.jpg' directory

น่าเสียดายที่วิธีที่สองนั้นใช้ไม่ได้กับนิพจน์ทั่วไป แต่ใช้สัญลักษณ์แทนเท่านั้น


ขอบคุณนี่คือสิ่งที่ฉันกำลังมองหา คุณช่วยจดบันทึกเกี่ยวกับชื่อไฟล์ที่ใช้งานไม่ได้? เช่นมีอักขระอะไร
Frodik

คุณไม่ควรกังวลมากเกินไป - ชื่อไฟล์ส่วนใหญ่ทำงานได้ดีกับโซลูชั่นนั้น ปัญหาคือชื่อไฟล์ UNIX / Linux สามารถรวมทุกอย่างไว้ได้แม้กระทั่งตัวควบคุม - ชุดที่คลุมเครือเช่นนี้จะไม่ทำงานกับวิธีแก้ปัญหาแรก
Vladimir Blaskov

การอ่านที่ดีเกี่ยวกับชื่อไฟล์ UNIX / Linux / POSIX: dwheeler.com/essays/fixing-unix-linux-filenames.html
Vladimir Blaskov

0

บางทีคุณควรลองcpio

http://cybertiggyr.com/cpio-howto

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

ls |sed   '/[0-9]*x[0-9]*X.*/d' >/tmp/files

จากนั้นคุณสามารถใช้มันเป็นอินพุตของ cpio

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