แก้ไข: ฉันเดาว่าโพสต์นี้ไม่ 'ไม่มีประโยชน์อย่างยิ่ง' อย่างที่ฉันคิดว่ามันเป็น นี่เป็นวิธีแก้ปัญหาที่รวดเร็วมากที่เพิ่งติดตามไฟล์ที่แก้ไขล่าสุด (แทนที่จะเรียงลำดับรายการไฟล์ทั้งหมด):
find . -type f -printf '%T@ %p\n' | awk 'BEGIN { mostrecenttime = 0; mostrecentline = "nothing"; } { if ($1 > mostrecenttime) { mostrecenttime = $1; mostrecentline = $0; } } END { print mostrecentline; }' | cut -f2- -d ' '
กระจายไปบนหลายบรรทัดเพื่อความชัดเจน
find . -type f -printf '%T@ %p\n' | awk '
BEGIN { mostrecenttime = 0; mostrecentline = "nothing"; }
{
if ($1 > mostrecenttime)
{ mostrecenttime = $1; mostrecentline = $0; }
}
END { print mostrecentline; }' | cut -f2- -d ' '
สิ้นสุดการแก้ไข
ไม่ใช่โพสต์ที่มีประโยชน์โดยเฉพาะ แต่เนื่องจาก 'จัดการ' กำลังพูดถึงความเร็วฉันคิดว่าฉันจะแชร์สิ่งนี้
วิธีแก้ปัญหาการจัดเรียงและ enzotib เกี่ยวข้องกับการแสดงรายการไฟล์ทั้งหมดในไดเรกทอรีที่มี mtimes ของพวกเขาและจากนั้นเรียงลำดับ ในขณะที่คุณรู้ว่าการเรียงลำดับไม่จำเป็นต้องค้นหาค่าสูงสุด การค้นหาสูงสุดสามารถทำได้ในเวลาเชิงเส้น แต่การเรียงลำดับต้องใช้เวลา n บันทึก (n) เวลา [ฉันรู้ว่าความแตกต่างนั้นไม่มาก แต่ก็ยัง;)] ฉันคิดไม่ออกว่าจะนำสิ่งนี้ไปใช้อย่างไร [แก้ไข: ดูเรียบร้อย (แม้ว่าจะดูสกปรก) และมีการนำไปใช้อย่างรวดเร็วด้านบน]
สิ่งที่ดีที่สุดถัดไป - หากต้องการค้นหาไฟล์ที่แก้ไขล่าสุดในไดเรกทอรีให้ค้นหาไฟล์ที่แก้ไขล่าสุดซ้ำในไดเรกทอรีย่อยระดับ 1 แต่ละรายการ ให้ไฟล์นี้เป็นตัวแทนไดเรกทอรีย่อย ตอนนี้เรียงลำดับไฟล์ระดับ 1 พร้อมกับตัวแทนของไดเรกทอรีย่อยระดับ 1 หากจำนวนไฟล์ระดับ 1 และไดเร็กตอรีย่อยของแต่ละไดเร็กทอรีใกล้เคียงกับค่าคงที่กระบวนการนี้ควรปรับขนาดเชิงเส้นด้วยจำนวนไฟล์ทั้งหมด
นี่คือสิ่งที่ฉันคิดขึ้นมาเพื่อใช้สิ่งนี้:
findrecent() { { find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1; }
findrecent .
ฉันวิ่งและได้รับfind: findrecent: No such file or directory
ข้อผิดพลาดมากมาย เหตุผล: -exec of find run ในเชลล์ที่ต่างกัน ฉันพยายามกำหนด findrecent เป็น. bashrc, .xsessionrc แต่สิ่งเหล่านี้ไม่ได้ช่วย [ฉันขอขอบคุณที่นี่] ในที่สุดฉันก็หันไปใส่
#!/bin/bash
{ find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1;
ในสคริปต์ที่เรียกว่าfindrecent
ในเส้นทางของฉันแล้วเรียกใช้
ฉันวิ่งสิ่งนี้รอต่อไปและรอโดยไม่มีเอาต์พุต เพียงเพื่อให้แน่ใจว่าฉันไม่ได้จัดการกับลูปไม่ จำกัด ใด ๆ ที่ฉันแก้ไขไฟล์เป็น
#!/bin/bash
echo "$1" >&2
{ find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1;
และลองอีกครั้ง มันใช้งานได้ - แต่ใช้เวลา 1 นาที 35 วินาทีในบ้านของฉัน - วิธีการแก้ปัญหาและการจัดเรียงของ enzotib ใช้เวลา 1.69, 1.95 วินาทีตามลำดับ!
มากสำหรับ O (n) เหนือกว่า O (n log (n))! ประณามคุณเรียกใช้ค่าใช้จ่าย! [หรือมากกว่าการเรียกใช้สคริปต์]
แต่สคริปต์นี้ทำงานได้ดีกว่าโซลูชันก่อนหน้านี้และฉันคิดว่ามันจะทำงานได้เร็วกว่าในหน่วยความจำของ Google; D