Kommandoen find
er et rigtig godt værktøj til at finde filer og evt. slette dem.
Her et par eksempler:
Tæl antallet af filer der starter med strengen ‘sess_’ i filnavnet og er mere end et år gamle:
1 |
find . -name "sess_*" -type f -atime +365 | wc -l |
Find jpg filer i en mappe der er tilgået (læst/vist) for mere end 2 dage siden:
1 |
find /sti/til/mappe/ -name "*.jpg" -type f -atime +2 -ls |
Find filer i den aktuelle mappe, der starter med ‘faktura’ og som er ændret for mindre end 2 dage siden:
1 |
find . -name "faktura*" -type f -mtime -2 -ls |
Vil man slette de filer der findes, er det blot et spørgsmål om at tilføje delete
:
1 |
find . -name "faktura*" -type f -mtime -2 -delete |
Skal jeg bruge rm eller delete?
Når du finder eksempler på brug af find
rundt omkring, vil du måske undre dig over, at folk nogengange bruger delete
, og andre gange rm
. som f.eks.:
1 2 3 4 5 |
#Brug -delete hvis den findes i din version af find find . -name .DS_Store -delete #Brug rm hvis -delete ikke er tilgængelig find . -name ".DS_Store" -exec rm {} \; |
Det er bedst at bruge delete
da det er den mest effektive, dog findes den ikke i alle versioner af find
og derfor vil du også se at rigtig mange benytte rm
.
!!–> MEN HUSK! Skriv delete
som den sidste parameter <–!! … ellers risikerer du at slette meget mere end forventet…
Mere om dette emne i dette stackoverflow svar
Brug find
til at rydde op i php/apache sessionsfiler
Jeg opdagede forleden at vi har rigtig mange sessionsfiler liggende. Langt flere end der burde være. Årsagen er, at det på nogle systemet, som eks. Ubuntu, nu er blevet standard at slå dette fra af sikkerhedsmæssige årsager. Man skal således selv sørge for at rydde op.
Det er her mest hensigtsmæssigt at kigge på parameteren atime
der fortæller hvornår filen sidst blev tilgået. Bruger man mtime eller ctime (sidst ændret) skal man nemlig være opmærksom på at en sessionsfil ikke nødvendigvis ændres ved hver forespørgsel.
Jeg lægger forsigtigt ud med at fjerne alle sessionfiler der ikke er tilgået i 30 dage.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#Tæl hvor mange der er i alt find . -name "sess_*" -type f | wc -l 63874 #Tæl hvor mange der ikke er tilgået i 30 dage find . -name "sess_*" -type f -atime +30 | wc -l 43062 #Slet dem find . -name "sess_*" -type f -atime +30 -delete #Tjek hvor mange der nu er tilbage find . -name "sess_*" -type f | wc -l 20812 |
Nu tjekker vi så lige at det her rent faktisk virkede efter hensigten. Det er i dag d. 3. august 2020. Lad os finde den ældste fil vi har efter oprydningen:
1 2 3 4 5 |
# ls -t | tail -1 sess_e2lblilhceuv1a92e7bk6os2tv # ls -la sess_e2lblilhceuv1a92e7bk6os2tv [...] Dec 6 2019 sess_e2lblilhceuv1a92e7bk6os2tv |
Hov!? 6. december… den burde da være slettet…. Gotcha! ls
viser ikke dato for seneste tilgåelse, men dato for seneste ændring.
1 2 3 4 5 6 7 8 9 |
stat sess_e2lblilhceuv1a92e7bk6os2tv File: sess_e2lblilhceuv1a92e7bk6os2tv Size: 155 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 2788176 Links: 1 Access: (0600/-rw-------) Uid: ( 33/www-data) Gid: ( 33/www-data) Access: 2020-08-03 14:37:37.512786889 +0200 Modify: 2019-12-06 12:12:17.579720362 +0100 Change: 2019-12-06 12:12:17.579720362 +0100 Birth: - |
Herover kan vi se at filen faktisk er tilgået i dag… og dermed må vi antage at sessionen stadig er aktiv. Derfor er det så vigtigt at bruge atime og ikke mtime/ctime når man rydder op i sessioner.