วิธีลบไฟล์ในบรรทัดคำสั่งด้วยนิพจน์ทั่วไป


18

ช่วยบอกว่าฉันมี 20 ไฟล์ชื่อ FOOXX โดยที่ XX คือจำนวนไฟล์เช่น 01, 02 เป็นต้น

ในตอนนี้ถ้าฉันต้องการลบไฟล์ทั้งหมดที่ต่ำกว่าหมายเลข 10 มันเป็นเรื่องง่ายและฉันก็ใช้ไวด์การ์ดเช่น rm FOO0 *

อย่างไรก็ตามหากฉันต้องการลบไฟล์ในช่วงที่ระบุเช่น 13-15 นี่จะยากขึ้น

rm FPP [13-15] ไม่ทำงานและถามฉันว่าฉันต้องการลบไฟล์ทั้งหมดหรือไม่ Likewse rm FOO1 [3-5] ต้องการลบไฟล์ทั้งหมดที่ขึ้นต้นด้วย FOO1

ดังนั้นวิธีที่ดีที่สุดในการลบช่วงของไฟล์เช่นนี้คืออะไร?

ฉันได้ลองทั้ง bash และ zsh แล้วและฉันไม่คิดว่าพวกเขาจะแตกต่างกันมากนักสำหรับงานพื้นฐานเช่นนี้?


"... rm FOO1 [3-5] ต้องการที่จะลบไฟล์ทั้งหมดที่ขึ้นต้นด้วย FOO1" ไม่สมเหตุสมผลและแน่นอนว่าไม่ใช่ในกรณีนี้
Ignacio Vazquez-Abrams

@Ignacio ใช่ - ฉันอยากเห็นชุดตัวละครมีลำดับการเรียงนั้น!
kmarsh

คำตอบ:


31

ในทุบตีคุณสามารถใช้:

rm FOO1 {3..5}

หรือ

rm FOO1 {3,4,5}

เพื่อลบ FOO13, FOO14 และ FOO15

ทุบตีขยายรั้งมีเอกสารที่นี่


2
rm FOO{13..15}หรือแม้กระทั่ง
Ignacio Vazquez-Abrams

สิ่งนี้เป็นจริงสำหรับ ZSH ด้วยหรือไม่
แจ็ค


@Jack: bashคำสั่งเป็นชุดย่อยของzคำสั่งเชลล์
abhinavkulkarni

ดังนั้นฉันต้องเรียนรู้ทั้ง regex และ globbing syntax โฮ. :)
Aditya MP

13

สำหรับผู้อ่านในอนาคตfindคำสั่งสามารถลบไฟล์ได้ ฉันตัดสินสิ่งนี้สำหรับปัญหาที่คล้ายกัน:

find . -type f -regex '...' -delete

แต่คำตอบที่เลือกคือ anser ที่ง่ายที่สุดสำหรับคำถามนี้


คำตอบที่เลือกนั้นดีสำหรับไฟล์ที่เป็นไปตามหลักการตั้งชื่อ ขอบคุณคำตอบของคุณฉันสามารถลบไฟล์วัตถุทั้งหมดในไดเรกทอรี (ในกรณีของฉันฉันเพิ่งไปกับfind . -name "*.o" -deleteมันและมันก็ทำงานได้เหมือนมีเสน่ห์)
John Hamilton

6

ls | grep regex | xargs rm


6
คุณควรใช้find -regex ... -print0 | xargs -0 ...สิ่งนี้มิฉะนั้นชื่อไฟล์จะมีช่องว่าง
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

1
แน่นอนถ้าคุณกำลังจะใช้แล้วคุณอาจจะใช้เป็นอย่างดีเพียงfind -exec
Ignacio Vazquez-Abrams

ในกรณีของฉันไฟล์มีช่องว่างและการเปลี่ยนตัวคั่นแก้ไขปัญหาช่องว่าง: ls | grep regex | xargs --delimiter = '\ n' rm
Anake


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