Bagaimana cara menggunakan perintah UNIX find
untuk mencari file yang dibuat pada tanggal tertentu?
Bagaimana cara menggunakan perintah UNIX find
untuk 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 -newerXY
dan ! -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.
-newerBt
akan cocok dengan waktu kelahiran (pembuatan) file .
-newerxt
tersedia 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
ctime
tidak 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
find
yang 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
stat
jika 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
, -mtime
parameter, 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 find
pembulatan 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 find
Anda tidak mendukung -newerXY
predikat 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.