ฉันมีไดเร็กทอรี: /home/user/
ฉันจะแสดงรายการไฟล์ทั้งหมดในไดเร็กทอรีนี้ได้อย่างไร (รวมถึงไฟล์ในไดเร็กทอรีย่อย) และเรียงลำดับตามวันที่แก้ไขล่าสุด
ฉันมีไดเร็กทอรี: /home/user/
ฉันจะแสดงรายการไฟล์ทั้งหมดในไดเร็กทอรีนี้ได้อย่างไร (รวมถึงไฟล์ในไดเร็กทอรีย่อย) และเรียงลำดับตามวันที่แก้ไขล่าสุด
คำตอบ:
คุณสามารถใช้ได้:
ls -Rt
โดยที่-R
หมายถึงการเรียกซ้ำ (รวมไดเรกทอรีย่อย) และ-t
หมายถึง "จัดเรียงตามวันที่แก้ไขล่าสุด"
หากต้องการดูรายการไฟล์ที่เรียงตามวันที่แก้ไขให้ใช้:
ls -l -Rt
นอกจากนี้ยังสามารถสร้างนามแฝงเพื่อให้บรรลุสิ่งนี้:
alias lt='ls -lht'
lt
ที่-h
ให้ผลลัพธ์ที่อ่านได้มากขึ้น
ls -lrt[RhA]
นี้พิจารณา -r
กลับลำดับการจัดเรียงออกจากสิ่งที่แก้ไขได้เมื่อเร็ว ๆ นี้ที่ด้านล่างของรายการ ...
-ila
ช่วยให้คุณได้รับข้อมูลทั้งหมดที่คุณต้องการ $ ls -ilaRt
ll -Rt
เป็นทางออกที่สมบูรณ์แบบสำหรับฉันเนื่องจากฉันต้องการดูไฟล์ตามวันที่แก้ไขล่าสุด สิ่งนี้อาจเป็นประโยชน์กับผู้อื่น
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
หรือระบุที่คุณหมาย
หากคุณต้องการรายการหลักที่ไฟล์ทั้งหมดถูกจัดเรียงเข้าด้วยกันตามวันที่แก้ไขโดยแสดงไดเรกทอรีที่อยู่ใน แต่ไม่ได้จัดกลุ่มตามไดเรกทอรีคุณสามารถใช้สิ่งนี้:
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 ตัวเลือก-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 ' '
find
ผู้เขียนอาร์กิวเมนต์เหล่านั้น-printf
คือคำสั่งรูปแบบที่พบได้ในman find
(ค้นหาอินสแตนซ์ที่ห้าของprintf
ในหน้านั้น)
find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' '
จะให้ผลลัพธ์ที่เหมือนกันบน MacOS โดยใช้ยูทิลิตี้ในตัวเท่านั้น
sort -r
เพื่อย้อนกลับการเรียงลำดับและมีไฟล์ที่แก้ไขล่าสุดอยู่ด้านบน
MAC OSX 2019
หากคุณไม่สนใจเวลาที่สร้างขึ้น แต่คุณต้องการจัดเรียงรายการของคุณให้ใช้คำสั่งนี้
==> ls -t
หากคุณต้องการสั่งซื้อและดูวันที่และข้อมูลผู้ใช้ให้ใช้คำสั่งนี้
===> ls -lt
สำหรับ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]))