วิธีลบไฟล์ (200,000 ไฟล์) จำนวนมาก?


17

ฉันต้องลบ 200,000 ไฟล์ (ทั้งหมดนี้) จากโฟลเดอร์และฉันไม่ต้องการลบโฟลเดอร์เอง

ใช้ rm ฉันได้รับข้อผิดพลาด "รายการอาร์กิวเมนต์ยาวเกินไป" ฉันพยายามทำบางสิ่งด้วย xargs แต่ฉันไม่ใช่ Shell Guy ดังนั้นจึงไม่ทำงาน:

find -name * | xargs rm -f

5
เหตุใดจึงไม่ลบโฟลเดอร์และสร้างใหม่หลังจากลบ?
garconcn

คำตอบ:


35
$ find /path/to/folder -type f -delete

15
มันอาจเป็นมูลค่าการกล่าวขวัญว่า GNU พบ (ที่ใช้ลินุกซ์โดยส่วนใหญ่) -deleteสามารถลบไฟล์ได้ด้วยตัวเองโดยใช้ นอกจากนี้ยังช่วยลดปัญหาเกี่ยวกับไฟล์ที่มีเครื่องหมายคำพูดหรืออักขระขึ้นบรรทัดใหม่ (แม้ว่าคุณสามารถใช้ตัวเลือก-print0ของ GNU find และ GNU xarg -0เพื่อแก้ไขปัญหาได้)
DerfK

3
@ DerfK, คำพูดที่ดี! นอกจากนี้จำนวนมากของ ppl มักจะเล่นกับในxargsขณะที่findมี-exec command {} +ไวยากรณ์
poige

5

คุณกำลังทำทุกอย่างถูกต้อง มันคือ'*'ที่ทำให้คุณมีปัญหา (เชลล์กำลังขยายเข้าไปในรายการไฟล์แทนที่จะเป็นfind) ไวยากรณ์ที่ถูกต้องอาจเป็น:

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(อันหลังนั้นมีประสิทธิภาพน้อยกว่าเล็กน้อยเนื่องจากมันจะผ่านชื่อที่ยาวกว่าxargsแต่คุณแทบจะไม่สังเกตเห็น :-))

หรือคุณสามารถหลีกเลี่ยง'*'ของคุณเช่นนี้ (แต่ในกรณีนี้มันจะลองลบ "." และ ".. " ด้วยเช่นกันมันไม่ใช่ปัญหาใหญ่ - คุณจะได้รับคำเตือนเล็กน้อย :-)):

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

หากชื่อไฟล์ของคุณมีช่องว่างให้ใช้สิ่งนี้:

find . -type f -print0 | xargs -0 rm -f

1
วิธีนี้ใช้ไม่ได้หากคุณมีชื่อไฟล์ที่มีช่องว่าง
user9517

@lain: ใช่ฉันอยู่ในขั้นตอนของการแก้ไขคำตอบของฉันเพื่อรวมเคล็ดลับสำหรับช่องว่างสีขาว :-)
dtoubelis

3

คำสั่งต่อไปนี้จะลบไฟล์ทั้งหมดออกจากไดเรกทอรีปัจจุบัน :

find . -type f -exec rm {} \;

2
-name '*'ไม่ได้หมายถึง "ไฟล์ทั้งหมด" ไฟล์ต่าง ๆ ถูกกล่าวด้วย:-type f
poige


1

ขอชื่นชมคำตอบของควอนตัมต่อไปนี้เป็นส่วนเพิ่มเติม

หากคุณต้องการลบไฟล์ที่มีรูปแบบชื่อเฉพาะคุณสามารถเขียนได้เช่นนี้ เพิ่ม - พิมพ์เพื่อให้คุณสามารถเห็นสิ่งที่เกิดขึ้นเมื่อไฟล์ถูกลบ

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

ตัวอย่างนี้ลบ jpegs ทั้งหมดใน mydirectory

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