ต้องการเรียงลำดับไฟล์ตามวันที่อัพเดทรวมถึงไดเรกทอรีย่อย


17

ฉันต้องการเรียงลำดับเฉพาะไฟล์ตามวันที่อัพเดทรวมถึงไดเรกทอรีย่อย

ฉันพบls -lrtR | grep ^-แล้ว แต่ดูเหมือนจะไม่เรียงตามวันที่อัพเดท

และฉันต้องการบันทึกรายการนี้ลงในไฟล์ เป็นไปได้ไหม?

Apr 01 2010  InsideDoosanServiceImpl.class  // in A directory
Apr 08 2010  MainController.class  // in B directory
Apr 07 2010  RecommendController.class  // in B directory
Apr 01 2010  MainDao.class  // in B directory

ฉันหมายความว่ารายการทั้งหมดไม่ได้เรียงตามวันที่ แต่เรียงลำดับตามโฟลเดอร์เป็นอันดับแรกและเรียงลำดับตามวันที่

ฉันต้องการรายชื่อเรียงตามวันที่ก่อนรวมทั้งไดเรกทอรีย่อยทั้งหมด

คำตอบ:


12

ฉันไม่แน่ใจว่าคุณหมายถึงอะไรupdate datesแต่คุณกำลังใช้-rตัวเลือกที่คนทำตาม -

-r ย้อนกลับลำดับของการเรียงลำดับเพื่อรับลำดับพจนานุกรมย้อนกลับหรือรายการที่เก่าที่สุดก่อน

ฉันคิดว่านี่น่าจะดีพอสำหรับคุณถ้าคุณต้องการจัดเรียงไฟล์ตามเวลา

ls -lRt

หากคุณไม่ต้องการสิ่งอื่น ๆ ที่ระบุไว้โดยlsคุณสามารถใช้ -

ls -1Rt

ในการจับผลลัพธ์ในไฟล์คุณสามารถใช้โอเปอเรเตอร์การเปลี่ยนเส้นทาง>และตั้งชื่อไฟล์ ดังนั้นคุณสามารถทำสิ่งนี้ -

ls -lRt > sortedfile.list

ปรับปรุง:

find . -type f -exec ls -lt {} +

ผมหมายถึงครั้งสุดท้ายที่ไฟล์ที่ถูกปรับเปลี่ยน :)

ผลการเรียงลำดับจะเรียงลำดับตามโฟลเดอร์และวันที่ ฉันต้องการจัดเรียงตามวันที่และโฟลเดอร์ .. เป็นไปได้ไหม

ขออภัยคุณช่วยเอาท์พุทของฉันหน่อยได้ไหม? ls -lrtฉันไม่ได้ค่อนข้างเป็นไปตามการเรียงลำดับของโฟลเดอร์ถ้าคุณใช้
jaypal singh

// Jaypal ซิงห์, ฉันอัพเดตผลงานของฉันไปเป็นคำถามของฉัน↑ :) ฉันหวังว่าคุณจะเข้าใจและขอโทษสำหรับภาษาอังกฤษที่ไม่ดีของฉัน

1
สิ่งนี้จะล้มเหลวหากรายการไฟล์มีความยาวเพียงพอที่จะบังคับxargsให้ทำการโทรหลายครั้งlsเนื่องจากไฟล์จะถูกเรียงลำดับอย่างถูกต้องภายในแต่ละlsการเรียกใช้ แต่ขาดลำดับโกลบอลที่สอดคล้องกันในเอาต์พุต
แบรนดอนโรดส์

19

ด้วย ls, -R จะลดจำนวนไดเรกทอรีและ -t จะเรียงลำดับตามการแก้ไข อย่างไรก็ตามมันสำรวจไดเรกทอรีซ้ำและใช้ -t กับแต่ละไดเรกทอรี มันไม่ได้รวบรวมไฟล์ทั้งหมดจากไดเรกทอรีทั้งหมดแล้วเรียงลำดับ (เท่าที่ฉันเข้าใจสิ่งหลังคือสิ่งที่คุณต้องการ)

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

find . -type f -printf "%T@ %f\n" | sort -n > out.txt

ใช่GNU findช่วย แต่ OP ทำงานบนAIXเครื่องจักรจึงGNU findไม่พร้อมสำหรับเขา
jaypal singh

มันแย่มากที่ไม่lsสามารถทำการสะสมไฟล์ก่อนทำการเรียงลำดับได้ lsเป็นอย่างรวดเร็วfindเมื่อเทียบกับ
Nathan ReinstateMonica Arthur

lsและfindอ่านข้อมูลเดียวกันดังนั้นฉันไม่สามารถจินตนาการได้ว่าเหตุผลใด ๆ ls ควรเร็วกว่าการค้นหามาก ในระบบของฉันพบคือ 5 ครั้งเร็ว (ค้นหาผ่านประมาณครึ่งล้านไฟล์)
Rolf Rander

7
คุณอาจต้องการวัน / เต็มเวลาและไม่เพียง แต่ชื่อไฟล์ แต่ยังเส้นทางในการส่งออกในกรณีที่ปรับเปลี่ยนการจัดรูปแบบสตริง: ผลผลิตรายการเอาท์พุทเช่นfind . -type f -printf "%T@ %Tc %p\n" | sort -n > out.txt 1427913836.2330520210 wed 1 apr 2015 20:43:56 ./subdir/file.txt
Carl

ยิ่งใหญ่ นั่นช่วยฉันออกไปจริงๆ ฉันกำลังมองหาวิธีที่จะเรียงลำดับในไดเรกทอรีย่อยสำหรับทุกวัย!
bhu Boue vidya
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.