ฉันพยายามค้นหาไฟล์ที่สร้างในเดือนมิถุนายนกรกฎาคมและสิงหาคม ฉันใช้วิธีนี้
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
แต่มันไม่ทำงาน
ฉันพยายามค้นหาไฟล์ที่สร้างในเดือนมิถุนายนกรกฎาคมและสิงหาคม ฉันใช้วิธีนี้
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
แต่มันไม่ทำงาน
คำตอบ:
คุณสามารถจับคู่ในหลายรูปแบบดังนี้:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
สิ่งนี้จะส่งคืนการแข่งขันทั้งหมดสำหรับ Jun, July หรือ Aug. คุณไม่จำเป็นต้องมีprint
คำสั่งเนื่องจากเป็นการawk
กระทำเริ่มต้นของ
awk '/Jun|Jul|Aug/'
หรือawk '/Ju[nl]|Aug/'
ตามกฎทั่วไปมันเป็นความคิดที่ดีมากที่จะแยกการส่งออกของคำสั่ง ls วิธีที่ดีกว่าในการทำสิ่งที่คุณต้องการคือ
stat -c "%n %y" * | grep 2013-0[678]
หรือมิฉะนั้นให้ตรวจสอบเฉพาะฟิลด์สุดท้ายเพื่อป้องกันกรณีที่ไม่น่าเป็นไปได้ที่ชื่อไฟล์เป็นวันที่:
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
จากman stat
:
-c --format=FORMAT
use the specified FORMAT instead of the default; output a new‐
line after each use of FORMAT
%y time of last modification, human-readable
%n file name
| awk '$NF ~ /2013-0[678]/'
เพื่อตรวจสอบเฉพาะฟิลด์เอาต์พุตล่าสุดใน (ไม่แน่?) แม้ว่าชื่อไฟล์จะตรงกับ regex แม้ว่าวันที่จะไม่
ls
เป็นคำสั่งเพื่อแสดงข้อมูลเกี่ยวกับไฟล์ในมนุษย์ที่สามารถอ่านได้ ไม่ได้ใช้มันในสคริปต์
find
คำสั่งในการค้นหาไฟล์ในการจับคู่ต้นไม้ไดเรกทอรีเกณฑ์ที่แน่นอนคือ หากคุณมี GNU find (เช่น Linux หรือ Cygwin ที่ไม่ใช่แบบฝัง) หรือ FreeBSD find (เช่น FreeBSD หรือ OSX) คุณสามารถใช้-newermt
เพื่อจับคู่ไฟล์ที่ถูกแก้ไขครั้งล่าสุดหลังจากวันที่กำหนด
find . -newermt '1 June' ! -newermt '1 September' -print
เพิ่มปีถ้าคุณต้องการจับคู่ไฟล์ในปีที่เฉพาะเจาะจงมากกว่าปีปฏิทินเมื่อสคริปต์ทำงาน
หากการดำเนินการค้นหาของคุณไม่มี-newermt
คุณจะต้องทำด้วย-newer
ซึ่งจะเปรียบเทียบวันที่ของไฟล์ที่find
พบกับไฟล์คงที่ ใช้touch
เพื่อสร้างไฟล์ชั่วคราวพร้อมวันที่ที่คุณต้องการใช้เป็นขอบเขต
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
[...]
โครงสร้างตรงกับอักขระเดี่ยวซึ่งสามารถเป็นหนึ่งในอักขระระหว่างวงเล็บ ดังนั้นนิพจน์ของคุณจึงตรงกับJJA
หรือJug
(J
จาก[Jun]
,u
จาก[Jul]
และg
จาก[Aug]
) แต่ไม่ใช่ตัวย่อของเดือนที่คุณต้องการจับคู่