แสดงรายการไฟล์ตามวันที่แก้ไขล่าสุด


104

ฉันมีไดเร็กทอรี: /home/user/

ฉันจะแสดงรายการไฟล์ทั้งหมดในไดเร็กทอรีนี้ได้อย่างไร (รวมถึงไฟล์ในไดเร็กทอรีย่อย) และเรียงลำดับตามวันที่แก้ไขล่าสุด

คำตอบ:


172

คุณสามารถใช้ได้:

ls -Rt

โดยที่-Rหมายถึงการเรียกซ้ำ (รวมไดเรกทอรีย่อย) และ-tหมายถึง "จัดเรียงตามวันที่แก้ไขล่าสุด"


หากต้องการดูรายการไฟล์ที่เรียงตามวันที่แก้ไขให้ใช้:

ls -l -Rt

นอกจากนี้ยังสามารถสร้างนามแฝงเพื่อให้บรรลุสิ่งนี้:

alias lt='ls -lht'
lt

ที่-hให้ผลลัพธ์ที่อ่านได้มากขึ้น


16
ขอบคุณที่สมบูรณ์แบบ ฉันเพิ่ม a -l เข้าไปด้วยดังนั้นฉันจึงสามารถดูวันที่ได้ดังนั้นสำหรับทุกคนที่ค้นหาสิ่งนี้ในภายหลังนั่นคือ
Marty

4
หากคุณทำที่รวดเร็วและต้องการที่จะเห็นการแก้ไขไฟล์ส่วนใหญ่เมื่อเร็ว ๆ ls -lrt[RhA]นี้พิจารณา -rกลับลำดับการจัดเรียงออกจากสิ่งที่แก้ไขได้เมื่อเร็ว ๆ นี้ที่ด้านล่างของรายการ ...
dmckee --- อดีตผู้ดูแลลูกแมว

สิ่งนี้ที่เพิ่มเข้ามาจะ-ilaช่วยให้คุณได้รับข้อมูลทั้งหมดที่คุณต้องการ $ ls -ilaRt
Falkenfighter

ฉันได้ขยายคำตอบนี้เนื่องจากการใช้ll -Rtเป็นทางออกที่สมบูรณ์แบบสำหรับฉันเนื่องจากฉันต้องการดูไฟล์ตามวันที่แก้ไขล่าสุด สิ่งนี้อาจเป็นประโยชน์กับผู้อื่น
Mus

@MusTheDataGuy llไม่มีอยู่และไม่ใช่คำสั่ง ส่วนใหญ่เป็นนามแฝงใน bash shell แต่ไม่ได้กำหนดไว้ในส่วนใหญ่ / some /? การแจกแจงลินุกซ์ บางคนกำหนดเป็นalias ll='ls -l'ใน /etc/bash.bashrc หรือ /etc/.bashrc ดังนั้นจึงอาจไม่ทำงานและอาจไม่มีอยู่ในระบบ OPs ใช้ls -l -Rtอย่างน้อยเช่นเดียวlsกับคำสั่งมาตรฐานที่กำหนดโดย posix alias ll='ls -l'; ll -Rtหรือระบุที่คุณหมาย
KamilCuk

73

หากคุณต้องการรายการหลักที่ไฟล์ทั้งหมดถูกจัดเรียงเข้าด้วยกันตามวันที่แก้ไขโดยแสดงไดเรกทอรีที่อยู่ใน แต่ไม่ได้จัดกลุ่มตามไดเรกทอรีคุณสามารถใช้สิ่งนี้:

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

ผลลัพธ์ดูเหมือนมากls -l:

-rw-r - r-- 1 รูท 3892 08/11/2009 11:03:36 /usr/share/man/man1/xmllint.1.gz
-rw-r - r-- 1 รูท 22946 08/13/2009 11:59:20 /usr/share/man/man1/curl.1.gz
-rw-r - r-- 1 รูท 728 08/17/2009 12:06:33 /usr/share/man/man1/thunderbird.1.gz
-rw-r - r-- 1 รูท 873 08/18/2009 10:52:47 /usr/share/man/man1/libgnutls-config.1.gz
-rw-r - r-- 1 รูท 2552 08/19/2009 02:00:34 /usr/share/man/man3/Purple.3pm.gz
-rw-r - r-- 1 รูท 9546 08/19/2009 02:02:00 /usr/share/man/man1/pidgin.1.gz
-rw-r - r-- 1 รูท 2201 08/19/2009 02:02:46 /usr/share/man/man3/Pidgin.3pm.gz
-rw-r - r-- 1 รูท 926 08/19/2009 02:03:05 /usr/share/man/man1/purple-remote.1.gz
-rw-r - r-- 1 รูท 18052 08/19/2009 04:11:47 /usr/share/man/man1/mono.1.gz
-rw-r - r-- 1 รูท 1845 08/19/2009 04:11:47 /usr/share/man/man5/mono-config.5.gz

Mac OS X

สำหรับบรรดาของคุณใช้ Mac OS X ตัวเลือก-printf ไม่สามารถใช้ได้ใน BSD หา (คุณจะได้รับข้อผิดพลาดนี้: find: -printf: unknown primary or operator) โชคดีที่คุณสามารถติดตั้ง GNU ได้จากHomebrew (ควรมีตัวเลือกสำหรับFinkและMacportsด้วย):

brew install findutils

หลังจากติดตั้งมัน GNU gfindหาควรจะมีให้คุณเป็น ดังนั้นสิ่งที่คุณต้องทำคือเปลี่ยนบรรทัดด้านบนเป็น:

gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

3
ทำได้ดีนี่. สิ่งที่จัดกลุ่มไดเร็กทอรีทั้งหมดด้วย ls -R นั้นน่ารำคาญ
El Yobo

1
รหัสที่ดีมันใช้สคริปต์ประมาณ. 5 วินาทีในการจัดเรียงและพิมพ์รูปภาพ 13k ในโฟลเดอร์ต่างๆ (ผ่าน Cygwin บนคอมพิวเตอร์ที่ค่อนข้างช้า)
Magnus

โอ้ตอนนี้ยอดเยี่ยมมาก สำหรับคน (เช่นฉัน) ที่ไม่คุ้นเคยกับfindผู้เขียนอาร์กิวเมนต์เหล่านั้น-printfคือคำสั่งรูปแบบที่พบได้ในman find(ค้นหาอินสแตนซ์ที่ห้าของprintfในหน้านั้น)
Owen Blacker

4
สำหรับใครก็ตามที่ต้องการใช้สิ่งนี้บน MacOS แต่ไม่ต้องการรบกวนการติดตั้ง findutils: find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' 'จะให้ผลลัพธ์ที่เหมือนกันบน MacOS โดยใช้ยูทิลิตี้ในตัวเท่านั้น
Jaymon

sort -rเพื่อย้อนกลับการเรียงลำดับและมีไฟล์ที่แก้ไขล่าสุดอยู่ด้านบน
maryisdead

0

MAC OSX 2019

หากคุณไม่สนใจเวลาที่สร้างขึ้น แต่คุณต้องการจัดเรียงรายการของคุณให้ใช้คำสั่งนี้

==> ls -t

หากคุณต้องการสั่งซื้อและดูวันที่และข้อมูลผู้ใช้ให้ใช้คำสั่งนี้

===> ls -lt


0

สำหรับzshผู้ใช้คุณสามารถใช้glob qualifiers (มีเอกสารด้วยman zshexpn):

echo *(om)

ในกรณีที่oย่อมาจากลำดับการจัดเรียงขึ้นและmย่อมาจากเวลาที่แก้ไขล่าสุด

สิ่งนี้จะมีประโยชน์เมื่อใช้ใน for loop หรือคำสั่งอื่น:

for file in *(^om); do
  [ -e "$file" ] || continue
  # do something with file orderer from least recently modified to last modified
done

หรือผูกมัดกับผู้ผ่านการคัดเลือกลูกโลกคนอื่น:

last_modified_file=(*(om[1]))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.