จะค้นหาและลบไฟล์ที่เก่ากว่าวันที่ระบุในยูนิกซ์ได้อย่างไร?


38

ฉันมีหนึ่งโฟลเดอร์สำหรับบันทึกด้วย 7 โฟลเดอร์ในนั้น โฟลเดอร์ทั้งเจ็ดนั้นก็มีโฟลเดอร์ย่อยอยู่ด้วยและโฟลเดอร์ย่อยเหล่านั้นก็มีโฟลเดอร์ย่อยด้วยเช่นกัน ฉันต้องการลบไฟล์ทั้งหมดที่เก่ากว่า 15 วันในโฟลเดอร์ทั้งหมดรวมถึงโฟลเดอร์ย่อยโดยไม่ต้องแตะโครงสร้างโฟลเดอร์นั่นหมายถึงเฉพาะไฟล์

mahesh@inl00720:/var/dtpdev/tmp/ > ls
A1  A2  A3  A4  A5  A6  A7

mahesh@inl00720:/var/dtpdev/tmp/A1/ > ls
B1 B2 B3 B4 file1.txt file2.csv

คำตอบ:


54

find /var/dtpdev/tmp/ -type f -mtime +15คุณสามารถเริ่มต้นด้วยการพูดว่า จะค้นหาไฟล์ทั้งหมดที่เก่ากว่า 15 วันและพิมพ์ชื่อ เป็นทางเลือกคุณสามารถระบุ-printในตอนท้ายของคำสั่ง แต่นั่นเป็นการกระทำเริ่มต้น แนะนำให้รันคำสั่งด้านบนก่อนเพื่อดูว่าไฟล์ใดถูกเลือก

หลังจากที่คุณตรวจสอบว่าfindคำสั่งแสดงรายการไฟล์ที่คุณต้องการลบ (และไม่มีผู้อื่น) คุณสามารถเพิ่ม "การกระทำ" เพื่อลบไฟล์ การกระทำทั่วไปที่ต้องทำคือ:

  1. -exec rm -f {} \;(หรือเท่ากัน-exec rm -f {} ';')
    สิ่งนี้จะทำงานrm -fในแต่ละไฟล์; เช่น,

    rm -f /var/dtpdev/tmp/A1/B1; rm -f /var/dtpdev/tmp/A1/B2; rm -f /var/dtpdev/tmp/A1/B3; …
    
  2. -exec rm -f {} +
    สิ่งนี้จะทำงานrm -fในหลาย ๆ ไฟล์พร้อมกัน เช่น,

    rm -f /var/dtpdev/tmp/A1/B1 /var/dtpdev/tmp/A1/B2 /var/dtpdev/tmp/A1/B3 …
    

    ดังนั้นจึงอาจเร็วกว่าตัวเลือก 1 เล็กน้อย (อาจต้องเรียกใช้rm -fสองสามครั้งหากคุณมีไฟล์หลายพันไฟล์)

  3. -delete
    นี้จะบอกตัวเองเพื่อลบไฟล์โดยไม่ต้องทำงานfind rmสิ่งนี้อาจเร็วกว่า-execตัวแปรเล็กน้อย แต่มันจะไม่ทำงานในทุกระบบ

ดังนั้นหากคุณใช้ตัวเลือก 2 คำสั่งทั้งหมดจะเป็น:

find /var/dtpdev/tmp/ -type f -mtime +15 -exec rm -f {} +

การใช้ -delete นั้นง่ายกว่า (ไวยากรณ์และไม่มีกระบวนการลูกที่ทำเพื่อลบ) แต่อาจใช้ไม่ได้กับทุกระบบ rm -f {} + ดีที่สุดมันจะลบไฟล์เป็นชุดถ้ามีไฟล์เพียงพอที่จะมากเกินไปสำหรับหนึ่งบรรทัดคำสั่ง rm -f {} ';' จะให้คำสั่งผิดพลาดนานเกินไปหากมีไฟล์เพียงพอที่จะมากเกินไปสำหรับหนึ่งบรรทัดคำสั่ง
gaoithe

-1

หรือทำด้วยการวนซ้ำ:

for x in $(find /var/dtpdev/tmp/ -type f -mtime +15); do rm "$x"; done

สิ่งนี้จะไม่ทำงานกับไฟล์ที่มีช่องว่าง
Drav Sloan

คุณสามารถใช้การวนรอบสักครู่แทนซึ่งควรดูแลไฟล์ด้วยช่องว่าง find / var / dtpdev / tmp / -type f -mtime +15 | ในขณะที่อ่าน x; ทำ rm "$ x"; เสร็จสิ้น
David Okwii
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.