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


20

เป็นไปได้หรือไม่ที่จะค้นหาphpไฟล์ทั้งหมดภายในไดเรกทอรีที่ได้รับการแก้ไขในวันที่แน่นอน

ฉันกำลังใช้

find /var/www/html/dir/ -mtime -28 | grep '\.php' 

เพื่อรับไฟล์ที่แก้ไขภายใน 28 วันที่ผ่านมา แต่ฉันต้องการเพียงไฟล์ที่ได้รับการแก้ไขในวันที่ดังต่อไปนี้: 2011-02-08

คำตอบ:


22

ในเวอร์ชันล่าสุดของfind(เช่น GNU 4.4.0) คุณสามารถใช้-newermtตัวเลือก ตัวอย่างเช่นเพื่อค้นหาไฟล์ทั้งหมดที่ถูกแก้ไขใน 2011-02-08

$ find /var/www/html/dir/ -type f -name "*.php" -newermt 2011-02-08 ! -newermt 2011-02-09

โปรดทราบว่าคุณไม่จำเป็นต้องไพพ์เป็น grep เพื่อค้นหาไฟล์ php เพราะ find สามารถทำสิ่งนั้นให้คุณได้ใน-nameตัวเลือก

ดูคำตอบเพิ่มเติมนี้เพื่อหาคำแนะนำเพิ่มเติม: วิธีใช้ 'ค้นหา' เพื่อค้นหาไฟล์ที่สร้างในวันที่ระบุได้อย่างไร


4

annoyingly มีไม่ทางตรงใด ๆ findที่มีมาตรฐาน รุ่นล่าสุดfindบนระบบ GNU (เช่นไม่ใช่ฝัง Linux, Cygwin) และบาง BSDs * มีตัวเลือกเช่น-newermtเพื่อเปรียบเทียบวันที่ไฟล์ที่มีวันที่สะกดออก

ด้วยมาตรฐานfindสิ่งที่คุณทำได้คือเปรียบเทียบวันที่ไฟล์กับวันที่ปัจจุบัน ( -mtime) หรือไฟล์คงที่ วันที่ปัจจุบันมักจะไม่มีประโยชน์ในกรณีนี้ (นับถอยหลังจากเวลาที่คุณเรียกใช้findคำสั่งในขณะที่แอปพลิเคชันส่วนใหญ่ต้องการวันที่ของปฏิทิน) นั่นทำให้คุณมี kludge ในการสร้างไฟล์ชั่วคราวเพื่อกำหนดช่วง

touch -t 201103070000 start.tmp
touch -t 201103080000 stop.tmp
find . -newer start.tmp \! -newer stop.tmp -print
rm start.tmp stop.tmp

2

คุณมีคำสั่งที่ถูกต้องเกือบแล้วสำหรับเวอร์ชันfindที่ไม่อนุญาตให้คุณใช้วันที่:

find /var/www/html/dir/ -mtime 27 | grep '\.php'

โดยทั่วไปสำหรับfind- nหมายถึงน้อยกว่า , nหมายถึงเท่ากับ , + nหมายถึง "มากกว่า" แบบดั้งเดิมfindมีข้อยกเว้นบางประการ แต่ GNU findและรุ่นที่ใหม่กว่าเช่นใน BSD / Mac OS X จะแก้ไขข้อผิดพลาดเหล่านั้น (โปรดระลึกไว้เสมอว่าคุณเคยพบตัวเองในระบบ Solaris หรือระบบ Unix เชิงพาณิชย์อื่น ๆ )


1

ด้วยzshคุณสามารถใช้ฟังก์ชั่นageเพื่อพิมพ์เฉพาะชื่อของไฟล์ที่ได้รับการแก้ไขในวันที่แน่นอน:

อายุ autoload
print -rl - * .php (.e: อายุ 2011/02/08 :)

หรือหากคุณต้องการค้นหาแบบเรียกซ้ำ:

อายุ autoload
setopt Extendedglob
print -rl - ** / *. php (.e: อายุ 2011/02/08 :)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.