จะแสดงรายการไฟล์แบบเรียกซ้ำและเรียงลำดับตามเวลาที่แก้ไขได้อย่างไร


13

ฉันจะแสดงรายการไฟล์ทั้งหมดภายใต้ไดเรกทอรีซ้ำและเรียงลำดับผลลัพธ์ตามเวลาการแก้ไขได้อย่างไร

ปกติแล้วฉันจะใช้งานls -lhtcแต่ไม่พบไฟล์ทั้งหมดซ้ำ ๆ ฉันใช้ Linux และ Mac

ls -l บน Mac OS X สามารถให้

-rw-r--r--    1 fsr  user      1928 Mar  1  2011 foo.c
-rwx------    1 fsr  user      3509 Feb 25 14:34 bar.c

ในกรณีที่ส่วนวันที่ไม่สอดคล้องหรือจัดแนวดังนั้นวิธีการแก้ปัญหาจะต้องคำนึงถึงนี้

สารละลายบางส่วน

stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-

ใช้งานได้ แต่ไม่ใช่แบบเรียกซ้ำ


ฉันจะสมมติว่าคุณอยู่บน Linux แต่คุณควรระบุระบบปฏิบัติการของคุณอย่างชัดเจนทั้งในคำถามหรือโดยเฉพาะอย่างยิ่งในแท็ก
EBGreen

คำตอบ:


2

นี่เป็นวิธีการที่แนะนำให้ใช้stat@ johnshen64

find . -type f -exec stat -f "%m%t%Sm %N" '{}' \; | sort -rn | head -20 | cut -f2-

find "$PWD" -type f -exec stat -f $'%m\t%N' '{}' \; | sort -rn | cut -f2-จะพิมพ์เพียงเส้นทางที่แน่นอนของไฟล์ใน OS X
Lri

statคุณใช้เวอร์ชั่นไหน รูปแบบของคุณด้านบนไม่ได้ผลสำหรับฉัน ฉันต้องใช้สิ่งต่อไปนี้: find . -type f -exec stat --printf "%Y\t%y %N\n" '{}' \; | sort -rn | cut -f2-. นี่คือกับstat (GNU coreutils) 8.23
user84207

12

ใช้find's -printfและจัดเรียงในรูปแบบวันที่ที่เหมาะสม:

find -type f -printf '%T+\t%p\n' | sort -n

สิ่งนี้ควรลดกระบวนการส้อมให้น้อยที่สุดและเร็วที่สุด

ตัวอย่างถ้าคุณไม่ชอบส่วนที่สองที่เป็นเศษส่วน (ซึ่งมักจะไม่นำมาใช้ในระบบไฟล์อยู่แล้ว):

find -type f -printf '%T+\t%p\n' | sed 's/\.[[:digit:]]\{10\}//' | sort -n
find -type f -printf '%T+\t%p\n' | cut --complement -c 20-30 | sort -n

แก้ไข:มาตรฐานfindบน Mac -printfไม่ได้ แต่ก็ไม่ยากที่จะติดตั้ง GNU บน Mac (ดูที่ลิงก์สำหรับคำเตือนเพิ่มเติมเกี่ยวกับการทำงานร่วมกับ Mac / Linux และxargs)


0

find .ควรจะได้รับไฟล์ทั้งหมด บางสิ่งเช่นนี้

find . -exec ls -dl '{}' \; | sort -k 6,7

คุณต้องปรับมันตามที่คุณต้องการ


ฉันยังถือว่ามันเป็น linux เช่น EBGreen กล่าวว่า ls เป็นนามแฝงใน windows PS ดังนั้นคุณต้องใช้ sort-object และรับรายการย่อยซ้ำถ้าเป็นเช่นนั้น แต่ความคิดเหมือนกัน
johnshen64

มันทำงานได้อย่างถูกต้องหรือไม่เมื่อบางครั้งวันที่พลาดปีบน Mac?
qazwsx

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

@ johnshen64: lsบน Linux มี--time-formatตัวเลือกที่คุณสามารถใช้เพื่อให้แน่ใจว่าวันที่ล่าสุดและวันที่เก่ากว่าของไฟล์จะแสดงในรูปแบบเดียวกัน
RedGrittyBrick

อ่าขอบคุณคุณพูดถูกเพียงแค่ไม่ได้ใช้มัน ที่ง่ายกว่าการใช้สถิติ มันเรียกว่า - ไทม์สไตล์ฉันคิดว่า
johnshen64

0

คำตอบสำหรับคำถามที่คล้ายกันในเว็บไซต์ Unix Stack Exchange ช่วยฉันได้เพราะฉันใช้ zsh:

วิธีแสดงรายการไฟล์ที่เรียงลำดับตามวันที่แก้ไขซ้ำ (ไม่มีคำสั่งสถิติให้ใช้!)


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