find
Belirli bir tarihte oluşturulan dosyaları aramak için UNIX komutunu nasıl kullanırım ?
find
Belirli bir tarihte oluşturulan dosyaları aramak için UNIX komutunu nasıl kullanırım ?
Yanıtlar:
Max'in işaret ettiği gibi yapamazsınız, ancak değiştirilen veya erişilen dosyaları kontrol etmek o kadar da zor değildir. Bu güne kadar geç bir eğitim yazdım . Özü kullanmak -newerXY
ve! -newerXY
:
Örnek: 7 Haziran 2007'de değiştirilen tüm dosyaları bulmak için:
$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08
29 Eylül 2008'de erişilen tüm dosyaları bulmak için:
$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30
Veya izinleri aynı gün değişen dosyalar:
$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30
Dosyadaki izinleri değiştirmezseniz, 'c' normalde oluşturma tarihine karşılık gelir.
-newerBt
dosyanın doğum (oluşturma) zamanında eşleşecektir .
-newerxt
mevcuttur FreeBSD (ilk sağlandı 2001 yılından bu yana bir yama olarak 1998 yılında), birkaç diğer BSD ve GNU bulmak tanıtıldı HP / UX bulmak dayanan, (2007 yılında 4.3.3 beri) -newerXY
(fakat Y == t desteklenmez).
find location -ctime time_period
Zaman_dönemi örnekleri:
30 günden daha önce: -ctime +30
30 günden daha az bir süre önce: -ctime -30
Tam 30 gün önce: -ctime 30
ctime
oluşturma süresi ile hiçbir ilgisi yoktur , inode değiştirme zamanıdır.
Bu iki adım ama bunu bu şekilde yapmayı seviyorum:
Önce belirli bir tarih / saat içeren bir dosya oluşturun. Bu durumda, dosya gece yarısı 2008-10-01'dir
touch -t 0810010000 /tmp/t
Şimdi yukarıdaki dosyadan daha yeni veya daha eski olan tüm dosyaları bulabiliriz (dosya değiştirilme tarihine göre değişir.) -Anewer erişilebilir ve için -Cnewer değişti dosya durumu).
find / -newer /tmp/t
find / -not -newer /tmp/t
Dokunarak iki dosya oluşturarak belirli tarihler arasındaki dosyalara da bakabilirsiniz
touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2
Bu, iki tarih ve saat arasındaki dosyaları bulur
find / -newer /tmp/t1 -and -not -newer /tmp/t2
find
yoksun-newerXY
Bunu yapabilirsin:
find ./ -type f -ls |grep '10 Sep'
Misal:
[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
yoksa find -printf
.
Yapamazsın. -C anahtarı izinlerin en son ne zaman değiştirildiğini, -a en son erişim süresini ve -m değişiklik süresini test eder. Linux'un pek çok çeşidi (ext3) tarafından kullanılan dosya sistemi bir "oluşturma zamanı" kaydını desteklemez. Afedersiniz!
@ Maks: oluşturma zamanı hakkında doğru.
Eğer biri için geçen gün argüman hesaplamak istiyorsanız Ancak, -atime
, -ctime
, -mtime
parametreleri, aşağıdaki ifadeyi kullanabilirsiniz
ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
"2008-09-24" yerine istediğiniz tarihi girin; ELAPSED_DAYS, o zaman ile bugün arasındaki gün sayısına ayarlanacaktır. (Güncelleme: find
tarih yuvarlamasıyla hizalamak için sonuçtan birini çıkarın .)
Bu nedenle, 24 Eylül 2008'de değiştirilen herhangi bir dosyayı bulmak için komut şöyle olacaktır:
find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
Bu, sürümünüz @Arve: 'ın cevabında belirtilen tahminleri find
desteklemiyorsa -newerXY
işe yarayacaktır.
Bu komut dosyasını 14 günden eski tüm dosyaları silen bir komut dosyasında buldum:
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
Ben biraz ek "adam bulmak" ve -ctime / -atime vb parametreleri arıyor burada size yardımcı olacağını düşünüyorum.