การลบไฟล์ตามอายุ


16

มีคำสั่งให้ลบไฟล์ทั้งหมดในไดเรกทอรีที่ไม่ได้รับการแก้ไขในNวันหรือไม่? ฉันต้องล้างบันทึกเก่า ๆ

คำตอบ:


24

การดำเนินการนี้จะลบไฟล์ทั้งหมดที่เก่ากว่า 5 วันคุณสามารถใส่ไฟล์-name '*log'ในนั้นให้แม่นยำยิ่งขึ้นและคุณอาจต้องการระบุmaxdepthคำสั่ง find ใน

find /some/dir -type f -mtime +5 -delete


5
แม้ว่า sysadmins ที่ชาญฉลาดจะทำงานแบบแห้งด้วย-lsแทนที่จะ-deleteทำให้แน่ใจว่าสิ่งนี้จะไม่ลบสิ่งที่พวกเขาต้องการเก็บไว้ ใช่พูดจากประสบการณ์ที่นี่
Shadur

2
พูดจากประสบการณ์พวกเขายังตรวจสอบเส้นทางของพวกเขา หรือไม่เพราะฉันเคยทำ/ some/dir/เวอร์ชั่น :(
Hennes

3

ด้วยzshและตัวระบุแบบ(.m+n) กลม : .เลือกเฉพาะไฟล์ปกติm+nเลือกไฟล์ที่ถูกดัดแปลงมากกว่าnวันก่อน
เช่นแสดงรายการไฟล์ในไดเรกทอรีปัจจุบันที่ถูกแก้ไขมากกว่า 9 วันที่ผ่านมา:

print -rl -- *(.m+9)

เพิ่มDเพื่อรวมไฟล์ dot:

print -rl -- *(D.m+9)

หรือถ้าคุณต้องการที่จะเรียกคืน (และรายการเช่นไฟล์ที่ลงท้ายด้วย.log):

setopt extendedglob
print -rl -- **/*.log(.m+9)

แทนที่print -rlด้วยrmหากคุณพอใจกับผลลัพธ์ แม้ว่าคุณอาจจะต้องใช้zargsถ้าคุณมีไฟล์จำนวนมาก (เพื่อหลีกเลี่ยงรายการอาร์กิวเมนต์นานเกินไป ):

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