ฉันจะสร้าง `find 'find files ตามลำดับเวลาย้อนกลับได้อย่างไร


17

ฉันต้องการค้นหาไฟล์ในไดเรกทอรีย่อยเรียงตามเวลาประทับ (ของการสร้าง) โดยล่าสุดก่อน

ฉันดูที่หน้า man แต่ดูเหมือนว่าจะให้คุณกรองตามเวลาเท่านั้นแทนที่จะเรียงตาม timestamp

ฉันสามารถส่งตัวเลือกอะไรบ้างfindเพื่อบรรลุเป้าหมายนี้ อีกวิธีหนึ่งฉันจะรวมกับเครื่องมืออื่นเช่นsortจัดเรียงตามเวลาได้อย่างไร


1
คุณไม่สามารถfindทำอะไรได้ในลำดับที่เรียงลำดับโดยเฉพาะนอกเหนือจากการเลือกระหว่างการค้นหาเชิงลึกครั้งแรกและการค้นหาแบบกว้างแรก
Jonathan Leffler

@ merlin2011 โปรดตรวจสอบการเลือกคำตอบของคุณที่นี่ - คำตอบในปัจจุบันที่เลือกเป็นรถ (จะสร้างผลที่ไม่ได้จริงเรียงถูกต้อง) เมื่อมีไฟล์มากขึ้นโดยพบว่าเกินกว่าที่จะผ่านไปเช่นเดียวของfind ls
ชาร์ลส์ดัฟฟี่

@CharlesDuffy ขอบคุณสำหรับการบันทึก! ฉันได้อัพเดตคำตอบที่ยอมรับแล้ว
merlin2011

คำตอบ:


32

ในขณะที่วิธีแก้ปัญหาของ Paul โดยทั่วไปแล้วจะเกี่ยวข้องกับ I / O มากกว่าเพียงแค่:

find bin/ -type f -printf '%Ts\t%p\n' | sort -nr | cut -f2

เกิดอะไรขึ้นถ้าfindส่งคืนไฟล์นับล้านไฟล์ การเรียงลำดับจะไม่เรียงลำดับทั้งหมดเป็นรายการยาวมากใช่ไหม มันจะยังคงมีประสิทธิภาพหรือไม่? (แทนที่จะเรียงลำดับแต่ละไดเรกทอรีอย่างอิสระ)
Peter Mortensen

1
ไม่ทำงานกับตัวละครตลกในชื่อไฟล์เช่นขึ้นบรรทัดใหม่
Boris Brodski

2
สิ่งนี้สมควรได้รับเพียงความคิดเห็นต่อคำตอบของ user7385 แต่ฉันไม่มีชื่อเสียงที่จะทำเช่นนั้น find bin/ -type f -printf '%Ts\t%p\0' | sort -nrz | cut -f2 -z | xargs -0 lsเวอร์ชันใหม่cutมีตัวเลือก -z ดังนั้นชื่อไฟล์ที่มีการขึ้นบรรทัดใหม่จะใช้งานได้
MattBlissett

จำนวน I / O ไม่ได้เป็นเหตุผลหลักที่ต้องการคำตอบนี้ - ความถูกต้องเป็นความแตกต่างที่สำคัญมาก xargs -0 ls -tวิธีจะไม่ทำงานอย่างถูกต้องเมื่อมีไฟล์จำนวนมากเพื่อให้xargsตอบสนองความต้องการที่จะเริ่มต้นlsมากกว่าหนึ่งครั้ง แต่วิธีการนี้จะยังคงฟังก์ชั่น
ชาร์ลส์ดัฟฟี่

@PeterMortensen "การจัดเรียงทั้งหมดเป็นรายการที่มีความยาวมาก" เป็นวิธีเดียวในการจัดเรียงรายการที่ส่งคืนผลลัพธ์ที่ถูกต้อง ยิ่งกว่านั้นคำตอบอื่น ๆ / คำตอบที่ยอมรับไม่ได้ "จัดเรียงแต่ละไดเรกทอรีอย่างอิสระ" (ถ้าใครต้องการที่จะเรียงลำดับเพียงไดเรกทอรีเดียวโดยไม่ต้อง recursing หนึ่งอาจใช้-maxdepth 1ในfind)
ชาร์ลส์ดัฟฟี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.