Bagaimana cara menggunakan perintah UNIX finduntuk mencari file yang dibuat pada tanggal tertentu?
Bagaimana cara menggunakan perintah UNIX finduntuk mencari file yang dibuat pada tanggal tertentu?
Jawaban:
Seperti yang ditunjukkan oleh Max, Anda tidak bisa, tetapi memeriksa file yang dimodifikasi atau diakses tidak terlalu sulit. Saya menulis tutorial tentang ini, hingga hari ini. Inti dari yang digunakan -newerXYdan ! -newerXY:
Contoh: Untuk menemukan semua file yang dimodifikasi pada tanggal 7 Juni 2007:
$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08
Untuk menemukan semua file yang diakses pada 29 September 2008:
$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30
Atau, file yang izinnya berubah pada hari yang sama:
$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30
Jika Anda tidak mengubah izin pada file, 'c' biasanya akan sesuai dengan tanggal pembuatan.
-newerBtakan cocok dengan waktu kelahiran (pembuatan) file .
-newerxttersedia di FreeBSD sejak tahun 2001 (di mana pertama kali disediakan sebagai tambalan pada tahun 1998), beberapa BSD dan GNU lainnya ditemukan (sejak 4.3.3 pada tahun 2007), berdasarkan temuan HP / UX, yang diperkenalkan -newerXY(tetapi di mana Y == t tidak didukung).
find location -ctime time_period
Contoh time_ period:
Lebih dari 30 hari yang lalu: -ctime +30
Kurang dari 30 hari yang lalu: -ctime -30
Tepat 30 hari yang lalu: -ctime 30
ctimetidak ada hubungannya dengan waktu pembuatan , itu waktu perubahan inode.
Ini dua langkah tapi saya suka melakukannya dengan cara ini:
Pertama buat file dengan tanggal / waktu tertentu. Dalam hal ini, file adalah 2008-10-01 pada tengah malam
touch -t 0810010000 /tmp/t
Sekarang kita dapat menemukan semua file yang lebih baru atau lebih tua dari file di atas (berdasarkan tanggal modifikasi file. Anda juga dapat menggunakan -anewer untuk diakses dan -cnewer status file berubah).
find / -newer /tmp/t
find / -not -newer /tmp/t
Anda juga dapat melihat file di antara tanggal tertentu dengan membuat dua file dengan sentuhan
touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2
Ini akan menemukan file antara dua tanggal & waktu
find / -newer /tmp/t1 -and -not -newer /tmp/t2
findyang kurang-newerXY
Anda bisa melakukan ini:
find ./ -type f -ls |grep '10 Sep'
Contoh:
[root@pbx etc]# find /var/ -type f -ls | grep "Dec 24"
791235 4 -rw-r--r-- 1 root root 29 Dec 24 03:24 /var/lib/prelink/full
798227 288 -rw-r--r-- 1 root root 292323 Dec 24 23:53 /var/log/sa/sar24
797244 320 -rw-r--r-- 1 root root 321300 Dec 24 23:50 /var/log/sa/sa24
statjika Anda tidak punya find -printf.
Kamu tidak bisa Saklar -c memberi tahu Anda ketika izin terakhir diubah, -a menguji waktu akses terbaru, dan -m menguji waktu modifikasi. Sistem file yang digunakan oleh sebagian besar rasa Linux (ext3) tidak mendukung catatan "waktu pembuatan". Maaf!
@ Max: benar tentang waktu pembuatan.
Namun, jika Anda ingin menghitung hari argumen berlalu untuk salah satu -atime, -ctime, -mtimeparameter, Anda dapat menggunakan ekspresi berikut
ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
Ganti "2008-09-24" dengan tanggal apa pun yang Anda inginkan dan ELAPSED_DAYS akan ditetapkan ke jumlah hari antara saat itu dan hari ini. (Perbarui: kurangi satu dari hasil untuk menyelaraskan dengan findpembulatan tanggal.)
Jadi, untuk menemukan file yang dimodifikasi pada 24 September 2008, perintahnya adalah:
find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
Ini akan berfungsi jika versi findAnda tidak mendukung -newerXYpredikat yang disebutkan dalam jawaban @Arve:.
Saya menemukan skrip ini dalam skrip yang menghapus semua file yang lebih lama dari 14 hari:
CNT=0
for i in $(find -type f -ctime +14); do
((CNT = CNT + 1))
echo -n "." >> $PROGRESS
rm -f $i
done
echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG
Saya pikir sedikit tambahan "man find" dan mencari parameter -ctime / -atime dll. Akan membantu Anda di sini.