ลบไฟล์ที่เก่ากว่า 7 วันโดยอัตโนมัติ


17

ฉันเป็น noob ที่สมบูรณ์แบบที่ linux แต่ฉันเริ่มได้รับมันแล้ว ฉันมี Ubuntu Server ที่ 16.04 ใช้งานเซิร์ฟเวอร์ FTP เพื่อสำรองไฟล์วิดีโอความปลอดภัย ไฟล์จะถูกเก็บไว้ในโฟลเดอร์ที่ต้องการ: /home/securityfolder1, /home/securityfolder2, /home/securityfolder3และอื่น ๆ

โปรดทราบว่าแต่ละคนsecurityfolderNเป็นผู้ใช้ที่แตกต่างกัน

เนื่องจากฉันไม่ต้องการให้ฮาร์ดดิสก์เต็มตลอดเวลาฉันต้องการลบไฟล์ที่เก่ากว่า 7 วันในโฟลเดอร์เหล่านี้ทุกวัน


/homeมักจะมีโฟลเดอร์ย่อยสำหรับผู้ใช้แต่ละคน หากคุณไม่ต้องการจัดเก็บข้อมูลสำรองของคุณในฐานะผู้ใช้อื่น (ไม่ใช่ความคิดที่ดีจริงๆ) คุณควรพิจารณาสถานที่อื่นเช่น/home/security/backup1และอื่น ๆ
Melebius

@ Melebius ขอบคุณสำหรับความคิดเห็นของคุณทุก ๆ / securityfolder เป็นผู้ใช้ที่แตกต่างกันฉันลืมที่จะพูดถึงมัน
Jacco van de Wijgaart

คำตอบ:


27

ขั้นแรกคำสั่งนี้จะค้นหาและลบไฟล์ทั้งหมดที่เก่ากว่า 7 วันในไดเรกทอรีย่อยใด ๆ/homeที่ชื่อขึ้นต้นด้วยsecurityuser:

find /home/securityuser* -mtime +6 -type f -delete

คุณต้องการ-mtime +6และไม่ได้+7เพราะ-mtimeระยะเวลานับ 24 ชั่วโมง ตามที่อธิบายไว้ใน-atimeส่วนของman find( -mtimeทำงานในลักษณะเดียวกัน):

   -atime n
          File  was  last  accessed n*24 hours ago.  When find figures out
          how many 24-hour periods ago the file  was  last  accessed,  any
          fractional part is ignored, so to match -atime +1, a file has to
          have been accessed at least two days ago.

ดังนั้นเพื่อค้นหาไฟล์ที่มีการปรับเปลี่ยนหรือมากกว่า 7 วันที่ผ่านมาคุณต้องไปหาไฟล์ที่มีการแก้ไขมากกว่า 6 -mtime +6วันที่ผ่านมาจึง

ขั้นตอนต่อไปคือให้รันคำสั่งวันละครั้ง เนื่องจากแต่ละคนsecurityuserNเป็นผู้ใช้ที่แตกต่างกัน (คุณอาจต้องการคิดใหม่เกี่ยวกับการตั้งค่ามันทำให้ทุกอย่างซับซ้อนขึ้น) จึงต้องเรียกใช้ในฐานะรูท ดังนั้นแก้ไข/etc/crontab:

sudo nano /etc/crontab

และเพิ่มบรรทัดนี้:

@daily root find /home/securityuser* -mtime +6 -type f -delete

ที่จะเรียกใช้findคำสั่งวันละครั้งและลบไฟล์


+1 ผลักเล็บให้ลึกลงไปอีกนิดและอาจจะย้ำคำแนะนำของ Melebius ต่อ OP ว่าfind '/home/securityuser/*' -mtime +6 -type f -delete(โดยการเปลี่ยนแปลงที่เกี่ยวข้องและเหมาะสมในการสร้างผู้ใช้) อาจเป็นความคิดที่ดีกว่า find '/home/securityuser*' -mtime +6 -type f -delete(ไม่มีเครื่องหมายทับ)
Cbhihe

@Chihhe ไม่ไดเรกทอรีเป้าหมายถูกเรียก/home/securityuserNดังนั้นโดยไม่มีเครื่องหมายทับพวกเขาจะไม่พบ
terdon

เห็นแล้วว่า ไม่คิดว่ามันเป็นการปฏิบัติที่ดีในส่วนของ OP (สร้างผู้ใช้แยกต่างหากสำหรับแต่ละวิดีโอความปลอดภัย ฯลฯ ... ) ตามแนวความคิดเห็นแรกของ Melebius แม้ว่า OP อาจมีเหตุผลในการทำเช่นนั้น หากความคิดเห็นของฉันเป็นง่อยไม่ใช่คำติชมของคำตอบที่ดีและครบถ้วน
Cbhihe

1
+1 จากฉัน เพิ่งบันทึกรายละเอียดหนึ่งขณะที่ฉันกำลังใช้งานบน RHEL: สัญลักษณ์แทนไม่ทำงานบนเส้นทาง ฉันต้องวางมันลงบน-name:find /home/ -name 'securityuser*' -mtime +6 -type f -delete
Stelios Adamantidis

1
@SteliosAdamantidis โอ้ว้าวฉันพลาดไปโดยสิ้นเชิง! 'securityuser*'ใช่รุ่นเดิมจะไม่ทำงานตั้งแต่ผมได้ยกมา สัญลักษณ์แทนควรขยายโดยเชลล์ไม่ใช่โดยfindดังนั้นควรเป็นsecurityuser*(ไม่มีเครื่องหมายคำพูด) ดูคำตอบที่อัปเดต ขอบคุณสำหรับการชี้ให้เห็น Stelio ฉันไม่อยากจะเชื่อเลยว่าไม่มีใครสังเกตเห็นมาก่อน! Ti vlakas!
terdon

4

ตามความรู้ของฉัน:

ลองใช้findคำสั่งเช่นนี้:

find ./dirc/* -mtime +6 -type f -delete

./dirc/* : is your directory (Path)
-mtime +6 : modified more than 6 days ago (therefore, at least 7 days ago)
-type f : only files
-delete : no surprise. Remove it to test before like rm

ขอบคุณสำหรับคำตอบ. ./dirc/* หมายถึง: ./home/securityfolder1/* หรือว่าผิด
Jacco van de Wijgaart

ฉันเพิ่งลองใช้มันในกล่องเสมือนจริงของฉันfind /home/jacco/ -mtime +1 -type f -deleteและดูเหมือนว่าจะใช้งานได้ ฉันจะทำให้สิ่งนี้เป็นแบบอัตโนมัติได้อย่างไร
Jacco van de Wijgaart

สร้างไฟล์สคริปต์หนึ่งไฟล์และใช้คำสั่งนี้โดยใช้สคริปต์หากทำงานได้ดีกว่าเรียกใช้ไฟล์สคริปต์ของคุณในกระบวนการเริ่มต้น
Maulik Patel

ฉันเหมือนซุปเปอร์โนบที่นี่เพราะเป็นส่วนหนึ่งของการสร้างสคริปต์นี่หมายความว่าไฟล์ที่มี#!/bin/bashและรหัสภายใต้หรือไม่? หรือฉันโง่จริงๆที่นี่?
Jacco van de Wijgaart

2
@Melebius no พา ธ ไม่ควรอ้างถึงโดยเฉพาะอย่างยิ่งเมื่อมีอักขระ glob คุณต้องการให้มันขยายโดยเชลล์และการอ้างอิงจะบล็อก ลองตัวอย่างเช่น: find '/u*' -name local. มันเป็นคำสั่งเช่น-name "foo*"นั้นที่ควรจะยกมาเมื่อมีตัวละคร glob
terdon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.