ลบไฟล์ที่เก่ากว่า 500 วัน


10

ฉันมีไดเรกทอรีพร้อมไฟล์จากปี 2010 .. ฉันต้องการลบไฟล์ทั้งหมดที่เก่ากว่า 500 วันและฉันลองทำสิ่งนี้:

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

แต่ฉันได้รับสิ่งนี้:

-bash: /usr/bin/find: Argument list too long

ฉันรู้ว่านี่หมายความว่ามีไฟล์มากเกินไปและfindไม่สามารถจัดการได้ แต่ถึงฉันจะใส่+2000อันไหนมากกว่า 3 ปีฉันก็ยังได้

สิ่งที่ฉันหายไปที่นี่


1
unix.stackexchange.com/a/239268/116858 (ดูความคิดเห็นเพิ่มเติม)
Kusalananda

คำตอบ:


18

คุณหายไปซึ่งfindไม่ต้องการรายการไฟล์เป็นอินพุต ปัญหาคือว่า glob /var/log/arc/*ขยายไฟล์มากเกินไป อย่างไรก็ตามfindจะย่อเข้าสู่ไดเรกทอรีย่อยโดยค่าเริ่มต้นดังนั้นไม่จำเป็นต้องใช้ glob เลย:

find /var/log/arc/ -type f -mtime +500 -delete

-deleteเป็นเพรดิเคตที่ไม่ได้มาตรฐาน หากfindการใช้งานของคุณไม่รองรับคุณสามารถใช้:

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

แทน.


ขอบคุณ แต่ตอนนี้ได้รับสิ่งนี้: find: invalid predicate -delete'`
Garg

1
@Garg แรกขอโทษฉันเพิ่งคัดลอกคำสั่งของคุณและไม่ได้สังเกตเห็นว่าไวยากรณ์ของคุณผิด ไม่ได้ใช้-delete {}ดูการอัพเดต แต่ข้อผิดพลาดของคุณดูเหมือนว่าจะชี้ให้เห็นว่ารุ่นของคุณไม่สนับสนุนfind -deleteหากคุณไม่ได้ใช้ GNU find(โดยส่วนใหญ่แล้วคุณจะไม่ใช้เว้นแต่คุณใช้ Linux) คุณต้องใช้-exec -rm {} \;แทน
terdon

ขอบคุณ. -exec rm {} \;ทำเคล็ดลับ
Garg

1
@hobbs ผมไม่เห็นเหตุผลที่ไม่-execถูกกำหนดโดย POSIX
terdon

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