Mendapatkan semua file yang telah dimodifikasi pada tanggal tertentu

20

Apakah mungkin untuk menemukan semua phpfile dalam direktori tertentu yang telah dimodifikasi pada tanggal tertentu

saya menggunakan

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

untuk mendapatkan file yang dimodifikasi dalam 28 hari terakhir, tetapi saya hanya perlu file yang telah dimodifikasi pada tanggal berikut: 2011-02-08

Roland
sumber

Jawaban:

22

Pada versi terbaru find(mis. GNU 4.4.0) Anda dapat menggunakan -newermtopsi ini. Misalnya, untuk menemukan semua file yang telah dimodifikasi pada 2011-02-08

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

Perhatikan juga bahwa Anda tidak perlu melakukan pipe ke grep untuk menemukan file php karena find dapat melakukannya untuk Anda dalam -nameopsi.

Lihatlah jawaban SO ini untuk saran lebih lanjut: Bagaimana cara menggunakan 'temukan' untuk mencari file yang dibuat pada tanggal tertentu?

dogbane
sumber
4

Yang menjengkelkan, tidak ada cara langsung dengan standar find. Versi terbaru findpada sistem GNU (mis. Linux yang tidak tertanam, Cygwin) dan beberapa * BSD memiliki opsi seperti -newermtuntuk membandingkan tanggal file dengan tanggal yang dieja .

Dengan standar find, yang dapat Anda lakukan adalah membandingkan tanggal file dengan tanggal saat ini ( -mtime) atau dengan file tetap. Tanggal saat ini biasanya tidak berguna dalam kasus ini (itu menghitung mundur dari saat Anda menjalankan findperintah, sedangkan sebagian besar aplikasi memerlukan tanggal kalender). Itu membuat Anda dengan kludge membuat file sementara untuk menentukan rentang.

touch -t 201103070000 start.tmp
touch -t 201103080000 stop.tmp
find . -newer start.tmp \! -newer stop.tmp -print
rm start.tmp stop.tmp
Gilles 'SANGAT berhenti menjadi jahat'
sumber
2

Anda sudah memiliki perintah yang hampir benar, untuk versi findyang tidak akan membiarkan Anda menggunakan tanggal:

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

Secara umum, untuk find- n berarti lebih sedikit dari , n berarti sama , + n berarti "lebih dari". Tradisional findmemiliki beberapa pengecualian, tetapi GNU finddan versi yang lebih baru lainnya seperti pada BSD / Mac OS X memperbaikinya. (Ingatlah hal ini jika Anda menemukan diri Anda menggunakan Solaris atau sistem Unix komersial lainnya.)

geekosaurus
sumber
1

Dengan zshAnda bisa menggunakan fungsiage untuk mencetak hanya nama-nama file yang telah diubah pada tanggal tertentu:

usia autoload
print -rl - * .php (.e: age 2011/02/08 :)

atau, jika Anda ingin mencari secara rekursif:

usia autoload
setopt extendedglob
print -rl - ** / *. php (.e: age 2011/02/08 :)
don_crissti
sumber