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


12

ฉันมีไดเรกทอรีในเครื่องของฉันคิดว่ามันเป็นtmpไดเรกทอรีของฉันเองแต่อยู่ใน~ไดเรกทอรีของฉัน และฉันต้องการที่จะทำให้ระบบของฉันทุก 3 ชั่วโมงลบไฟล์ทั้งหมดใน (แม้ว่าการรักษาโครงสร้างไดเรกทอรีไว้เหมือนเดิม แต่ยังคงลบไฟล์ทั้งหมดในทุกระดับของไดเรกทอรีซ้ำ) ไดเรกทอรีที่เก่ากว่าวัน

ฉันใช้ Ubuntu GNOME 15.10 กับ GNOME 3.18 ฉันสามารถทำได้หรือไม่ และถ้าเป็นเช่นนั้นได้อย่างไร ฉันต้องการให้อัตโนมัติโดยไม่ต้องมีการโต้ตอบกับผู้ใช้ นี่ควรเป็นสิ่งที่เริ่มต้นโดยอัตโนมัติเมื่อฉันเข้าสู่ระบบดังนั้นฉันจึงไม่จำเป็นต้องเรียกใช้บางอย่างในทุกการเริ่มต้น

คำตอบ:


21

การใช้find:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp เป็นไดเรกทอรีที่จะค้นหาซ้ำเปลี่ยนสิ่งนี้ตามลำดับ

  • -type f จะค้นหาเฉพาะไฟล์

  • -mtime +0 ซึ่งจะจับคู่ไฟล์หากมีการแก้ไขครั้งล่าสุดหนึ่งวันหรือมากกว่านั้น

  • -delete จะเพิ่งลบไฟล์ที่ตรงกัน

นี่คือการจับ-mtime +0ส่วนใหญ่อาจคิดว่าจะใช้-mtime +1แต่findจะไม่สนใจเวลาเศษส่วนใด ๆ ในขณะที่คำนวณวัน ดังนั้น-mtime +1จะจับคู่ไฟล์หากมีการแก้ไขครั้งล่าสุดอย่างน้อย 2 วันที่ผ่านมา

เธซเธฑman find, -mtimeมีการประชุมระยะเวลาเดียวกับ-atime:

- เวลา n

เข้าถึงไฟล์ล่าสุดเมื่อ 24 ชั่วโมงที่แล้ว เมื่อพบว่ามีการเข้าถึงไฟล์ครั้งล่าสุดกี่ชั่วโมงที่ผ่านมาส่วนที่เป็นเศษส่วนใด ๆ จะถูกละเว้นดังนั้นเพื่อให้ตรงกับ -atime +1 จึงต้องมีการเข้าถึงไฟล์อย่างน้อยสองวันที่ผ่านมา

โปรดทราบว่าหากคุณต้องการความแม่นยำคุณควรดู-mminตัวเลือกในfindการระบุเวลาเป็นนาที

หากต้องการเรียกใช้เป็นระยะหลังจาก 3 ชั่วโมงคุณสามารถเพิ่มcronรายการ

เรียกใช้crontab -eและเพิ่ม:

00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete

ใช้zshเพื่อลบไฟล์:

rm ~/tmp/**/*(.-m+0)

กำลังเพิ่มไปยังcron:

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'

6

คุณควรจะสามารถลบไฟล์ทั้งหมดที่เก่ากว่า 1 วัน/home/username/directoryและไดเรกทอรีทั้งหมดด้านล่างด้วย:

find /home/username/directory -type f -mtime +1 -delete

และเพื่อกำหนดเวลาคำสั่งนั้นทุก ๆ สามชั่วโมงให้ตั้งเป็นงาน cron:

crontab -e

จากนั้นภายใน crontab:

0 */3 * * * find /home/username/directory -type f -mtime +1 -delete

ซึ่งเรียกใช้คำสั่งของคุณทุก ๆ สามชั่วโมงในชั่วโมง (เช่นนาที 0) ดังนั้นเวลา 3:00 น., 6:00 น. เป็นต้น

ไปที่cronและcrontab manpagesสำหรับข้อมูลเพิ่มเติมเกี่ยวกับพวกเขา


4
คำตอบนี้เป็นความผิดจริงโปรดดูคำตอบอื่น

4
เนื่องจากคำตอบนี้ผิดและไม่ได้พูดอะไรมากไปกว่าคำตอบอื่น ๆ โปรดปรับปรุงคำตอบของคุณเพื่อให้ถูกต้องและดีกว่าคำตอบอื่น ๆ หรือลบออก

5
@ParanoidPanda ฉันเข้าใจว่าคุณต้องการคำตอบที่มีคุณภาพสูง แต่การให้ความเห็นเป็นหลักในสิ่งเดียวกันสองครั้งนั้นค่อนข้างไม่จำเป็นและอาจถูกมองว่ารุนแรงโดยเฉพาะผู้ใช้ใหม่
RPiAwesomeness

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