ลบรูปแบบไฟล์ที่ตรงกัน


32

ฉันจำเป็นต้องลบไฟล์ทั้งหมดซ้ำในโฟลเดอร์ย่อยทั้งหมดที่ชื่อไฟล์มีหมายเลขตามด้วย 'x' ตามด้วยหมายเลขอย่างน้อยสองครั้ง

ตัวอย่าง:

ฉันต้องการลบไฟล์เหล่านี้:

'aaa-12x123-123x12.jpg'
'aaa-12x12-123x12-12x123.jpg'

แต่ฉันไม่ต้องการลบไฟล์เหล่านี้:

'aaa.jpg'
'aaa-12x12.jpg'
'aaaxaaa-123x123.jpg'
'aaaxaaa-aaaxaaa.jpg'

ฉันจะทำสิ่งนั้นได้อย่างไร (จาก bash shell)

คำตอบ:


61

สตริงมี“ หมายเลขตามด้วย xตามด้วยหมายเลข” และถ้าหากมันมีหลักตามด้วยxตามด้วยหลักเช่นถ้ามันมี substring [0-9]x[0-9]จับคู่รูปแบบ *[0-9]x[0-9]*[0-9]x[0-9]*.jpgดังนั้นคุณกำลังมองหาเพื่อลบไฟล์ที่มีชื่อตรงกับรูปแบบ

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -delete

หากคุณfindไม่มี-deleteให้โทรrmเพื่อลบไฟล์

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -exec rm {} +

2
ขอขอบคุณ! ไฟล์ 12.000 หายไปฉัน 2 วินาที ที่ช่วยให้ฉันทำงานด้วยตนเองบางอย่าง!
mikkelbreum

ทั้ง-deleteมิได้-exec rmทำงานสำหรับฉันในทุบตีบน Windows แต่สิ่งนี้ทำ:find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' | xargs rm
Tamlyn

2
@Tamlyn ใช้-print0และxargs -0มิฉะนั้นคำสั่งจะล้มเหลวด้วยชื่อไฟล์ที่มีช่องว่างหรือเครื่องหมายคำพูดเดี่ยว แต่-deleteและ-exec rm ทำงานบน Windows หากบางอย่างใช้งานไม่ได้แสดงว่ามันไม่ได้เกิดจากการใช้งาน
Gilles 'หยุดความชั่วร้าย' ใน

สิ่งนี้จะทำงานกับ Windows ได้หรือไม่
CodyBugstein

มันจะทำงานถ้าคุณมีพอร์ตของยูทิลิตี้ Unix เช่น Cygwin หรือ GNUWin32 เห็นได้ชัดว่ามันจะไม่ทำงานนอกกรอบบน Windows ดูแลว่า Windows มีโปรแกรมที่ไม่เกี่ยวข้องกันเรียกว่าfindเพื่อให้แน่ใจว่าสาธารณูปโภค Unix PATHเป็นครั้งแรกใน
Gilles 'หยุดความชั่วร้าย' ใน

0

คำสั่งที่ถูกต้องคือ:

find . -type f -iregex '.*[0-9]x[0-9]*\.jpg$'

วิธีนี้จะใช้เฉพาะไฟล์ที่มีชื่อ: 'aaa-12x12.jpg' แต่ไม่ใช่ 'aaa-12x12red.jpg'

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