ฉันจะลบไฟล์ทั้งหมดที่ตรงกับรูปแบบได้อย่างไร


76

เมื่อฉันย้อนกลับมาใน Mercurial มันจะเหลือหลาย.origไฟล์ ฉันต้องการเรียกใช้คำสั่งเพื่อลบทั้งหมด

ฉันได้พบแหล่งข้อมูลบางแห่งที่บอกว่าทำงาน:

rm **/*.orig

แต่นั่นทำให้ฉันมีข้อความ:

rm: ไม่สามารถลบ `* / .orig ': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

ฉันได้ลองด้วย:

  • rm -rv *.orig

  • rm -R *\.orig


คำตอบ:


148

ใช้findคำสั่ง (ด้วยความระมัดระวัง!)

find . -name '*.orig' #-delete

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


มันทำงานซ้ำ?
Frank Barcenas

2
@ FrankBarcenas ใช่แล้ว - find ทำทุกอย่างซ้ำแล้วซ้ำอีก หากคุณต้องการ จำกัด วิธีการทำงานคุณสามารถเล่นกับ-maxdepthหรือ-mindepthอาร์กิวเมนต์
Oli

6
แน่นอนออกจาก-deleteที่สิ้นสุดของธง find . -delete -name '*.orig'จะไม่สนใจตัวกรองและปิดบังไดเรกทอรีทั้งหมดของคุณ
ไมเคิล

1
@Michael ใช่ ฉันแก้ไขปัญหาด้วยแล้วgit clean -fdx
kyb

1
@kamal ฉันอาจจะยังคงใช้การค้นหา แต่ด้วย-regexหรือ-iregexภาคของ การแยกชื่อไฟล์ (เมื่อคุณกำลังวางไฟล์) อาจทำได้ยากในบางครั้ง
Oli

6

"find" มีเทคนิคขั้นสูงในการค้นหาไดเรกทอรีและไฟล์ rm ทั้งหมดหรือในปัจจุบัน

find ./ -name ".orig" -exec rm -rf {} \;

3
ประโยชน์ของการใช้-deleteคืออะไร
muru

@muru ฉันคิดว่าคุณจะได้รับพรอมต์สำหรับแต่ละไฟล์ถ้าคุณลบ -rf
ปีเตอร์

@ ปีเตอร์ไม่จำเป็นต้อง ถึงอย่างนั้นเหรอ? คำตอบที่ใช้-rfและมีfind -ok
muru

@muru มันดูเหมือน -delete ไม่ได้ลบโฟลเดอร์
Andrii Karaivanskyi

@AndriiKaraivanskyi เว้นแต่ว่าการลบจะล้มเหลว
muru

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