วิธีลบไฟล์ทั้งหมดที่เริ่มต้นด้วยสตริงที่แน่นอนใน Linux


36

ฉันต้องการค้นหาไฟล์ทั้งหมดที่เริ่มต้นด้วยชื่อNAMEในแผนผังต้นไม้และลบไฟล์เหล่านี้ทั้งหมดโดยใช้คำสั่งเชลล์

คำตอบ:


1

เพื่อลบไฟล์ทั้งหมดที่ชื่อมีชื่อ --- คุณสามารถใช้

find -name . 'name*' -exec rm {} \;

1
คุณยังสามารถเพิ่ม -f เป็นอาร์กิวเมนต์ 'rm' เพื่อให้คุณไม่ได้รับพร้อมท์สำหรับ "คุณแน่ใจหรือไม่ว่าต้องการลบไฟล์ X"
UtahJarhead

รุ่นที่grepมี-execสวิทช์?
Ben Graham

ทำไมความคิดเห็นนี้จึงมีการลงคะแนน
Ultrasonic54321

64

ลบไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยที่ชื่อไฟล์เริ่มต้นด้วย "foo":

$ find . -type f -name foo\* -exec rm {} \;

หมายเหตุ: ควรใช้ด้วยความระมัดระวัง - สำรองข้อมูลก่อน - ให้ทำในลักษณะแห้งก่อนเช่น

$ find . -type f -name foo\*

จะบอกชื่อของไฟล์ที่จะถูกลบ


5
ฉันต้องลบไฟล์มากกว่า 2 ล้านไฟล์และพบปัญหาfind . -type f -name foo\* -deleteเคล็ดลับ
Linas

25

ฉันได้ลองวิธีนี้มันใช้งานได้สำหรับฉันลองคำสั่งด้านล่าง

rm -rf Example*

ที่นี่ "ตัวอย่าง" เป็นข้อความที่ใช้กันทั่วไปสำหรับไฟล์ทั้งหมด


4
ไม่แน่ใจว่าทำไมนี่ไม่ใช่คำตอบที่ได้รับคะแนนสูงสุด ....
DanTheMan

@DanTheMan เป็นเพราะ ~ 4 ปีใหม่กว่าคำตอบอื่น ๆ นี่เป็นคำตอบที่ง่ายที่สุดแน่นอน
joshuakcockrell

10

คุณสามารถใช้find:

find . -name "name*" -exec rm {} \;

นอกจากนี้แทนที่จะระบุ '.' คุณสามารถระบุเส้นทางที่แน่นอน
UtahJarhead

3

ด้วยglobstarตัวเลือก (เปิดใช้งานด้วยshopt -s globstar):

rm -f **/NAME*

**/ขยายไป./, */, */*/, */*/*/ฯลฯ หากคุณมีไดเรกทอรีชื่อขึ้นต้นด้วยNAMEคำสั่งจะบ่นว่าrmไม่สามารถลบไดเรกทอรี แต่นั่นคือทั้งหมด

โปรดสังเกตว่านี่อาจเป็นข้อจำกัดความยาวบรรทัดคำสั่งหาก glob ตรงกับหลายไฟล์

อีกทางหนึ่งด้วยการร้องขอน้อยrmที่สุดเท่าที่จะเป็นไปได้ แต่ไม่ จำกัด ข้อจำกัดความยาวบรรทัดคำสั่ง:

find . -type f -name 'NAME*' -exec rm -f {} +

(สังเกตเห็น+แทน\;การปิด-execคำสั่ง)


2

find . -name 'foo'* -type f -delete ดูเหมือนว่าคำตอบที่ง่ายที่สุด

คุณสามารถรันสิ่งนี้โดยไม่-deleteตั้งค่าสถานะก่อนเพื่อดูว่าไฟล์ใดจะถูกลบ


-2

ค้นหาหมายเลข "Inode" ของไฟล์ / โฟลเดอร์แล้วลบโดยใช้หมายเลข inode ด้านล่างเป็นตัวอย่าง:

ls -il
3407873 drwxr-xr-x. 2 root   root      4096 Mar 30 07:49 p

find . -inum 3407873 -exec rm -rf {} \;

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