POSIX มีสิ่งนี้จะพูดเกี่ยวกับวันที่ในls
-l
รายชื่อ ong:
<date and time>
ฟิลด์ต้องมีวันที่และเวลาที่เหมาะสมเมื่อไฟล์ถูกแก้ไขล่าสุด ในโลแคล POSIX ฟิลด์จะเทียบเท่ากับเอาต์พุตของคำสั่ง date ต่อไปนี้:
date "+%b %e %H:%M"
... หากไฟล์ถูกแก้ไขในช่วงหกเดือนที่ผ่านมาหรือ:
date "+%b %e %Y"
การพิจารณาเรื่องนี้และเพื่อให้แน่ใจว่าหากมีบรรทัดใหม่ในชื่อไฟล์พวกเขาจะกลมกลืนกับls -q
ตัวเลือกPOSIX ที่ระบุอย่างเหมาะสมมันค่อนข้างง่ายในการจัดเตรียม regex สำหรับls
ผลลัพธ์โดยfind
ที่ไม่ต้องทำอะไรเลย:
d=$(date "+%b %e") y=$(date --date=yesterday "+%b %e")
echo "$d" "$y"
###OUTPUT###
Jul 5 Jul 4
grep
สำหรับสิ่งนั้นและคุณจะส่งคืนเฉพาะบรรทัดที่มีสตริงที่แสดงวันที่วันนี้หรือเมื่อวาน คำสั่งต่อไปนี้เพิ่มไปเล็กน้อย:
ls -alRcq | sed "1H;/^-/!{/./d;N;h};/$d\|$y/!d;x;/\n/p;g"
ls
ตัวเลือกประกอบด้วย:
-a
ส่งคืนไฟล์ทั้งหมดในไดเรกทอรีรวมถึงไฟล์ที่ขึ้นต้นด้วย .dot
-l
รายชื่อยาว
-R
รายการไดเรกทอรีลูกทั้งหมดซ้ำ
-c
แสดงเวลาแก้ไขมากกว่าเวลาเข้าถึง
-q
ส่งคืนเชลล์ glob ?
แทนที่จะเป็นอักขระที่ไม่สามารถพิมพ์ได้หรือ\t
ab ในชื่อไฟล์
ผลลัพธ์เหล่านั้นจะถูกส่งผ่าน|pipe
ไฟล์sed
ที่ตรงเท่านั้น:
- บรรทัดว่างนำหน้าชื่อพา ธ และบรรทัดต่อไปนี้
- บรรทัดที่ขึ้นต้นด้วย
-
(ในคำอื่น ๆ - ไม่ใช่d
สำหรับไดเรกทอรี)ที่มีของคุณด้วยdate
ด้วย
- มันไม่ได้พิมพ์บรรทัดชื่อพา ธ แม้ว่าจะไม่มีไดเรกทอรีที่พวกเขาตั้งชื่อไฟล์ที่คุณกรองไว้
ผลลัพธ์มีลักษณะดังนี้:
ls -alRcq --color=always |
sed "1H;/^-/!{/./d;N;h};/$d\|$y/!d;x;/\n/p;g"
###OUTPUT###
.:
-rw------- 1 mikeserv mikeserv 2086 Jul 4 10:52 .bash_history
-rw------- 1 mikeserv mikeserv 2657 Jul 4 15:20 .lesshst
-rw-r--r-- 1 mikeserv mikeserv 681 Jul 5 05:18 .zdirs
-rw------- 1 mikeserv mikeserv 750583 Jul 5 08:28 .zsh_history
-rw-r--r-- 1 mikeserv mikeserv 166 Jul 4 23:02 Terminology.log
-rw-r--r-- 1 mikeserv mikeserv 433568 Jul 4 13:34 shot-2014-06-22_17-10-16.jpg
-rw-r--r-- 1 mikeserv mikeserv 445192 Jul 4 13:34 shot-2014-06-22_17-11-06.jpg
./.cache/efreet:
-rw------- 1 mikeserv mikeserv 37325 Jul 4 22:51 desktop_localhost_C.eet
-rw------- 1 mikeserv mikeserv 37325 Jul 4 23:30 desktop_localhost_en_US.eet
-rw------- 1 mikeserv mikeserv 24090 Jul 4 22:51 desktop_util_localhost_C.eet
-rw------- 1 mikeserv mikeserv 24090 Jul 4 23:30 desktop_util_localhost_en_US.eet
-rw------- 1 mikeserv mikeserv 16037 Jul 4 23:30 icon_themes_localhost.eet
-rw------- 1 mikeserv mikeserv 3117 Jul 4 23:30 icons___efreet_fallback_localhost.eet
-rw------- 1 mikeserv mikeserv 768039 Jul 4 23:30 icons_gnome_localhost.eet
-rw------- 1 mikeserv mikeserv 18589 Jul 4 23:30 icons_hicolor_localhost.eet
./.config:
-rw-r--r-- 1 mikeserv mikeserv 30 Jul 4 19:10 pavucontrol.ini
./.config/chrome:
-rw-r--r-- 1 mikeserv mikeserv 94332179 Jul 4 13:36 conf.tar.lz4.bak
ใช่มันใช้งานได้กับLS_COLORS
- ซึ่งอาจเป็นลำดับความสำคัญต่ำสำหรับcron
หลักสูตรของคุณแต่เฮ้ตัวเลือกของคุณเปิดอยู่
ไม่ว่าในกรณีใด ๆ ข้อเสนอนี้มีข้อได้เปรียบที่สำคัญกว่าโซลูชันที่เป็นไปได้อื่น ๆ
ในสถานที่แรกfind
+ ls
เกี่ยวข้องกับการร้องขอหลายรายการ - นี่เกี่ยวข้องกับls
กระบวนการเดียวเท่านั้นและนี่คือสาเหตุที่มันสามารถจัดเรียงทุกอย่างได้อย่างน่าเชื่อถือ - ซึ่งเป็นค่าเริ่มต้น - และsort
เป็นสิ่งเสริมด้วยเช่นกัน
การแก้ปัญหาใด ๆ ที่เกี่ยวข้องfind
และsort
และls
การทำงานทั้งหมดสองครั้ง ls
และfind
ทั้งคู่จะแก้ไขชื่อพา ธ และstat
ทุกไฟล์ ls
และsort
จะจัดเรียงผลลัพธ์ทั้งหมด ls
มันอาจจะดีที่สุดคือแทนที่จะใช้เพียงครั้งเดียว
แน่นอนว่ามันมีdate
และsed
บางส่วนของคำตอบนี้ สิ่งสำคัญที่ควรทราบคือคุณทำส่วนที่ยากและรับ regex ก่อน - และเพียงครั้งเดียว - หลังจากนั้นคุณจะตัดรายการผลลัพธ์เพียงรายการเดียวแทนที่จะพูดว่ารับผลลัพธ์รับผลลัพธ์จัดเรียงผลลัพธ์และเรียงลำดับผลลัพธ์
สิ่งนี้จะไม่ทำลายชื่อไฟล์ที่มีการขึ้นบรรทัดใหม่เนื่องจากโซลูชันอื่น ๆ น่าจะเป็น วิธีการแก้ปัญหานี้มีคำเตือนของตัวเอง - ซึ่งฉันจะอธิบายต่อไป - แต่พวกเขาก็มีนาทีและจัดการได้อย่างง่ายดาย ในความคิดของฉันนี่เป็นทางออกที่แข็งแกร่งที่สุดที่นี่
มีสองกรณีที่คำสั่งดังกล่าวอาจทำให้คุณมีปัญหา ครั้งแรกที่เกี่ยวข้องกับ?
globs ในชื่อไฟล์ - ในขณะที่มันเป็นวิธีการแก้ปัญหาที่มีประสิทธิภาพมากขึ้นกว่าที่เสนออื่น ๆ ที่นี่และโอกาสที่คุณจะพบ a ?
ทั้งหมดมีขนาดเล็กพอในตัวเองมีความเป็นไปได้ที่จะแก้ไข globs เหล่านั้น สามารถจับคู่ชื่อไฟล์ได้มากกว่าหนึ่งชื่อ โปรดดูสิ่งนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้
ความเป็นไปได้อื่น ๆ นั้นเกี่ยวข้องกับผลบวกที่ผิดพลาด - ตัวอย่างเช่นหากคุณมีชื่อไฟล์ที่ตรงกับdate
สตริงที่เรากำลังค้นหาgrep
แต่ที่ไม่ได้แก้ไขจริงในวันใดวันหนึ่ง ฉันไม่ได้นับว่าเป็นปัญหา แต่ถ้าเป็นเช่นนั้นถามเกี่ยวกับมันและฉันอาจช่วยให้คุณสร้าง regex ที่เฉพาะเจาะจงมากขึ้นเพื่อจัดการกับเรื่องนี้
ls -ls **/*(.)