ฉันต้องลบ 200,000 ไฟล์ (ทั้งหมดนี้) จากโฟลเดอร์และฉันไม่ต้องการลบโฟลเดอร์เอง
ใช้ rm ฉันได้รับข้อผิดพลาด "รายการอาร์กิวเมนต์ยาวเกินไป" ฉันพยายามทำบางสิ่งด้วย xargs แต่ฉันไม่ใช่ Shell Guy ดังนั้นจึงไม่ทำงาน:
find -name * | xargs rm -f
ฉันต้องลบ 200,000 ไฟล์ (ทั้งหมดนี้) จากโฟลเดอร์และฉันไม่ต้องการลบโฟลเดอร์เอง
ใช้ rm ฉันได้รับข้อผิดพลาด "รายการอาร์กิวเมนต์ยาวเกินไป" ฉันพยายามทำบางสิ่งด้วย xargs แต่ฉันไม่ใช่ Shell Guy ดังนั้นจึงไม่ทำงาน:
find -name * | xargs rm -f
คำตอบ:
$ find /path/to/folder -type f -delete
-delete
สามารถลบไฟล์ได้ด้วยตัวเองโดยใช้ นอกจากนี้ยังช่วยลดปัญหาเกี่ยวกับไฟล์ที่มีเครื่องหมายคำพูดหรืออักขระขึ้นบรรทัดใหม่ (แม้ว่าคุณสามารถใช้ตัวเลือก-print0
ของ GNU find และ GNU xarg -0
เพื่อแก้ไขปัญหาได้)
xargs
ขณะที่find
มี-exec command {} +
ไวยากรณ์
คุณกำลังทำทุกอย่างถูกต้อง มันคือ'*'ที่ทำให้คุณมีปัญหา (เชลล์กำลังขยายเข้าไปในรายการไฟล์แทนที่จะเป็น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
คำสั่งต่อไปนี้จะลบไฟล์ทั้งหมดออกจากไดเรกทอรีปัจจุบัน :
find . -type f -exec rm {} \;
-name '*'
ไม่ได้หมายถึง "ไฟล์ทั้งหมด" ไฟล์ต่าง ๆ ถูกกล่าวด้วย:-type f
คุณสามารถลอง
find /path/to/folder -type f -print0 | xargs -0 rm -f
หรือ
find /path/to/folder -type f -exec rm -f "{}" +
ขอชื่นชมคำตอบของควอนตัมต่อไปนี้เป็นส่วนเพิ่มเติม
หากคุณต้องการลบไฟล์ที่มีรูปแบบชื่อเฉพาะคุณสามารถเขียนได้เช่นนี้ เพิ่ม - พิมพ์เพื่อให้คุณสามารถเห็นสิ่งที่เกิดขึ้นเมื่อไฟล์ถูกลบ
sudo find /home/mydirectory -name "*.jpg" -type f -print -delete
ตัวอย่างนี้ลบ jpegs ทั้งหมดใน mydirectory