ลบไฟล์ที่เก่ากว่าหนึ่งปีบน Linux


18

ตามเวลาไฟล์จำนวนมากยังคงอยู่ในระบบของฉันและฉันไม่ต้องการมันอีกต่อไปดังนั้นจะลบไฟล์ทั้งหมดที่มีอายุอย่างน้อยหนึ่งปีได้อย่างไร

คำตอบ:


34

คุณสามารถทำได้ด้วยคำสั่งนี้

find /path/to/files* -mtime +365 -exec rm {} \;

บางคนอธิบาย

/path/to/files* เป็นเส้นทางไปยังไฟล์

-mtimeใช้เพื่อระบุจำนวนวันที่ไฟล์นั้นเป็น +365 จะค้นหาไฟล์ที่เก่ากว่า 365 วันซึ่งเป็นหนึ่งปี

-exec อนุญาตให้คุณส่งคำสั่งเช่น rm


แก้ไขด้วย @Oli note -> คุณสามารถทำได้โดย:

find /path/to/files* -mtime +365 -delete

7
คุณควรอ้างอิงเครื่องหมาย( {}ใน-execเพื่อให้อ่าน-exec rm "{}" \;) ซึ่งทำให้แน่ใจว่าช่องว่างที่ได้รับการจัดการอย่างถูกต้อง ... และคุณก็สามารถใช้ฟังก์ชั่นแทน-delete -exec
Oli

1
@Oli Huh ??? (สิ่งที่คุณได้กล่าวว่าไม่สามารถได้รับสิทธิพิจารณาว่าผลัดเชลล์"{}"เข้าไป{}ก่อนที่จะผ่านมันไปfindในสถานที่แรกแล้วfindเพื่อทดแทนมัน quoting. {}เป็นข้อเสนอแนะในกรณี{และ}ตัวเองบางครั้งอาจได้รับการปฏิบัติเป็นพิเศษโดยเปลือก - ซึ่งมีอะไรจะ ทำกับช่องว่างและมัก{}จะไม่ต้องอ้างถึงฉันไม่สามารถนึกถึงสถานการณ์ใด ๆ ได้อย่างน้อยเมื่อเรียกใช้การค้นพบจากเชลล์สไตล์ Bourne เมื่อ{}ไม่มีสิ่งใดอยู่ภายในจะปรากฏตัวเป็นอาร์กิวเมนต์ จะต้องมีการยกมาคุณสามารถ?)
Eliah Kagan

1
@EliahKagan ใช่หันกลับมาfindจัดการกับการหลบหนีสำหรับตัวเอง แต่มันก็ไม่ได้เป็นนิสัยที่ดีในขณะที่สคริปต์ มันไม่เจ็บ
Oli

2
@Oli แต่มันไม่ได้ช่วยอะไรเลยแม้แต่ในหลักการ หากfindไม่ได้จัดการกับการหลบหนี"{}"จะยังคงมีผลเช่นเดียวกับ - {}ไม่สามารถใช้งานได้แทนที่จะทำงานทั้งคู่ สิ่งนั้น{}และ"{}"ประพฤติตนเหมือนกันไม่ใช่ - และไม่สามารถทำได้ - เนื่องจากคุณสมบัติพิเศษในการค้นหา ความสับสนในสิ่งที่ได้รับการขยายโดยเชลล์กับสิ่งที่เพิ่มขึ้นโดยบางโปรแกรมอื่น ๆเป็นนิสัยที่ไม่ดี เราทุกคนทำผิดพลาดเป็นครั้งคราว แต่ก็ยังผิดพลาด - ไม่ใช่วิธีปฏิบัติที่ดีที่สุด (ใครบางคนอาจยังอ้าง{}เพื่อช่วยให้มนุษย์เห็นว่ามันไม่ใช่รูปแบบสำหรับการขยายตัวของรั้ง แต่ไม่เกี่ยวข้องกับการแยกคำ)
Eliah Kagan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.