วิธีรับเฉพาะไฟล์ที่สร้างหลังจากวันที่ด้วย ls?


97

ด้วยlsคำสั่งเป็นไปได้หรือไม่ที่จะแสดงเฉพาะไฟล์ที่สร้างขึ้นหลังจากวันที่ที่ระบุชั่วโมง ...

ฉันถามเพราะฉันมีไดเรกทอรีพันไฟล์

ฉันต้องการดูไฟล์ทั้งหมดที่สร้างขึ้นเมื่อวานนี้

ฉันใช้ls -ltrแต่ฉันต้องรอเพื่อดูไฟล์ทั้งหมด ...

มีเทียบเท่าDIRECTORY/SINCE=dateจาก OpenVMS หรือไม่


1
lsแสดงรายการไฟล์ แต่ไม่ได้มีอะไรมากมายให้เลือกไฟล์ที่จะแสดงรายการหรือรูปแบบเอาต์พุต ใช้ globbing (สัญลักษณ์แทนเชลล์) หรือfindเมื่อคุณต้องการเลือกไฟล์ตามชื่อหรือข้อมูลเมตา (เช่นวันที่)
Gilles

3
แล้ววันที่ด้วย ls เป็นอย่างไรบ้าง? คุณสองคนโดนมันออกหรือไม่?
Garrett Albright

3
ด้วยzsh:ls -1 -- *(.m-1)
don_crissti

คำตอบ:


123

คุณสามารถใช้findคำสั่งเพื่อค้นหาไฟล์ทั้งหมดที่ถูกแก้ไขหลังจากผ่านไปหลายวัน

ตัวอย่างเช่นหากต้องการค้นหาไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันที่แก้ไขตั้งแต่เมื่อวาน (24 ชั่วโมงที่ผ่านมา) ให้ใช้:

find . -maxdepth 1 -mtime -1

โปรดทราบว่าจะหาไฟล์ที่แก้ไขก่อน 24 ชั่วโมงที่ผ่านมาคุณต้องใช้แทน-mtime +1-mtime -1


3
สิ่งที่ฉันจะพูด ไม่มีเหตุผลอะไรที่จะ จำกัด ตัวเองlsที่นี่
Warren Young

14
ด้วย GNU พบว่ามีความเป็นไปได้อื่น ๆ -mmin 5แสดงรายการไฟล์ที่แก้ไขใน 5 นาทีที่ผ่านมา -newermt "2011-02-27 13:42"แสดงรายการไฟล์ที่แก้ไขตั้งแต่วันที่ระบุ คุณสามารถใช้-exec ls --color -ld {} +แทน-lsการรับการแสดงผลสีปกติ (ถ้าคุณชอบเอาท์พุทสี ls)
Gilles

3
สังเกตเครื่องหมายลบ:find . -mmin -5
user7543

และ -maxdepth 1 สามารถเพิ่มเป็น n ค่าใด ๆ เพื่อค้นหาไฟล์ภายใต้ระดับไดเรกทอรีย่อยได้ด้วย
anshuman

3
สำหรับฉันมันทำงานเช่นนี้: ค้นหา -type f -newermt '1/15/2012 18:09:00'
woohoo

14
find . -type f -newermt '1/30/2017 0:00:00'

จะพบไฟล์ทั้งหมดที่แก้ไขหลังจากวันที่ระบุ


1
ls -ltr | grep "`date | awk '{print $2" "$3}'`"

5
สวัสดีคุณ Trant! ในขณะที่โซลูชันของคุณมีความคิดสร้างสรรค์ในการพยายามเคารพคำขอของคำถามที่จะใช้ ls การแยกวิเคราะห์ผลลัพธ์ของ ls นั้นไม่ค่อยปลอดภัย (เช่นเกิดอะไรขึ้นกับชื่อไฟล์รวมถึงการขึ้นบรรทัดใหม่ที่นี่?) และเราต้องการคำตอบไม่ใช่แค่ ตอร์ปิโด แต่จะอธิบายว่าพวกเขาทำงานในรายละเอียดมากเท่าที่เกี่ยวข้อง
dhag

1
ปัญหา: (1) ในระบบของฉันdateพูดว่าJun 03แต่lsพูดว่าJun  3ดังนั้นจึงไม่ทำงาน (2) หนึ่งสัปดาห์ก่อนวันที่คือวันที่ 27 พฤษภาคม  ls -l | grep "May 27"จะพบไฟล์ที่แก้ไขในวันนั้น แต่ไฟล์นั้นก็ถูกแก้ไขในวันที่ 27 พฤษภาคมของปีอื่น ๆ และไฟล์ที่มีชื่อ“ 27 พฤษภาคม” (และถ้าคุณคิดว่ามันเป็นเรื่องหลอกลวงโดยสิ้นเชิงให้ค้นหา“ 10 ธ.ค. ” ) (3) และถ้าคุณสามารถdateพูดJun 2ได้การโลภสำหรับสิ่งนั้นจะJun 20ผ่านJun 29แต่ไม่ใช่Jun  2(ด้วยสองช่องว่าง) … (ต่อ)
G-Man

1
(ต่อ) ... (4) OP ใช้ls -ltrเพื่อรับไฟล์ที่แก้ไขล่าสุดในตอนท้ายของรายชื่อ หากคุณกำลังต้องการออกเดทไม่จำเป็นต้องทำเช่นนั้น (ยกเว้นรับไฟล์ 27 พฤษภาคม 2558 เมื่อสิ้นสุดรายการหลังจากไฟล์ 27 พฤษภาคม 2014, 27 พฤษภาคม 2013 เป็นต้น) (5) ใน awk print $2, $3เทียบเท่ากับprint $2" "$3และอ่านได้ง่ายขึ้นมากโดยเฉพาะเมื่อมีเครื่องหมายอัญประกาศอีกสามระดับ
G-Man

ls -ltr | grep "$(date | awk '{print $2,$3}')"
SergioAraujo

0

หวังว่างานนี้:

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $9}'

ที่นี่:

$6 indicates position of month
$7 indicates day of the month

คำสั่งด้านบนนี้จะพิมพ์ชื่อไฟล์ทั้งหมดที่สร้างขึ้นในหรือหลังวันที่ 1 พฤษภาคมถึง 31 พฤษภาคม

ถ้าคุณต้องการพิมพ์วันที่บนคอนโซลลองดู

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

หากคุณต้องการระบุเส้นทางของไดเรกทอรีคุณอาจลองใช้

ls -ltr <path>| awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

ด้วยเหตุผลหลายประการคุณไม่ควรแยกวิเคราะห์lsเอาต์พุต และไม่ใช่ทุกคนที่พูดภาษาอังกฤษได้ :-)
Luc M
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.