ฉันจะลบไฟล์ทั้งหมดที่เล็กกว่าขนาดที่กำหนดในโฟลเดอร์ย่อยทั้งหมดได้อย่างไร


88

ฉันมีโฟลเดอร์ที่มีโฟลเดอร์ย่อยมากมายที่มีไฟล์ tif ขนาดเล็ก (น้อยกว่า 160kb) ซึ่งรวมเข้าด้วยกันในไฟล์ PDF ที่ใหญ่กว่าพร้อมกับไฟล์ tif แบบหลายหน้าขนาดใหญ่

ฉันต้องการลบไฟล์ tif ขนาดเล็กทั้งหมดโดยไม่ต้องลบไฟล์ที่มีขนาดใหญ่กว่า (tif หรือ pdf) และคงโครงสร้างไดเรกทอรีไว้ ฉันจะไปเกี่ยวกับมันบน Linux โดยใช้บรรทัดคำสั่งได้อย่างไร

คำตอบ:


155
find . -name "*.tif" -type 'f' -size -160k -delete

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

หมายเหตุก่อน- 160kแค่160kหมายถึง 160 กิโลไบท์ -160kหมายถึงน้อยกว่า 160 กิโลไบต์ +160kหมายถึงมากกว่า 160 กิโลไบต์

-type 'f'กองกำลังคำสั่งที่จะกระทำได้เฉพาะในไฟล์และไดเรกทอรีข้าม *.tifนี้จะหลีกเลี่ยงข้อผิดพลาดถ้าเส้นทางประกอบด้วยโฟลเดอร์ที่มีชื่อตรงกับรูปแบบ

หากคุณต้องการกรองขนาดในไบต์ (ในขณะที่ 160 ไบต์แทน 160 กิโลไบต์) 160cแล้วคุณจะต้องเขียนเช่นนี้ หากคุณเพิ่งเขียน160มันจะถูกตีความว่าเป็น 160 * 512 ไบต์ นี่เป็นข้อกำหนดที่แปลกโดย POSIX อ่านรายละเอียดเพิ่มเติมได้ที่นี่: https://unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unit-512-bytes


ดูเหมือนหน้าอูบุนตูที่พูดถึงนี้ ด้านล่างส่วน "การทดสอบ": อาร์กิวเมนต์ตัวเลขสามารถระบุเป็น + n สำหรับมากกว่า n, -n สำหรับน้อยกว่า n, n สำหรับ n แน่นอน
jdg

1
ขอบคุณ ฉันไม่ได้เกิดขึ้นกับข้อมูลที่อาจเป็นที่อื่นใน manpage
lesmana

เป็นสิ่งที่ดีคำสั่งนี้ยังทำงานซ้ำ กรณีการใช้งานของฉันจะเป็นการลบไฟล์. txt ที่ต่ำกว่า 12kB
อาทิตย์

ไม่จำเป็นต้องใช้ sudo?
Jean-François Gagnon

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