automaatne failide kustutaja
Moderaator: Moderaatorid
automaatne failide kustutaja
Olen otsinud sellist skripti jupikest, mida lasta käima cron abil ja mis kustutaks failid, mis on teatud päevi vanad. Ütleme, et kaks päeva. Seda oleks tegelikult vaja lihtsalt selleks, et backup failid automaatselt kustuksid.
Win jaoks on mul tegelikult selline exe olemas kui kellegil huvi peaks olema. Võin lahkesti jagada. Ise kirjutatud ja vabavara.
Win jaoks on mul tegelikult selline exe olemas kui kellegil huvi peaks olema. Võin lahkesti jagada. Ise kirjutatud ja vabavara.
palju häid mõtteid: http://www.linuxquestions.org/questions ... p?t=534961
Tõlkija (Mandriva Linux, KDE, Scribus, CUPS)
Sa tahad lihtsalt kuskilt kaustast 2 päeva vanad backupid kustutada ?
Ma lahendasin selle niimoodi, et kui mul on teatud arv backupe siis sisenen for loopi mis käib läbi kõik failid antud kaustast ja kustutab lihtsalt kõige vanema backupi ära. Kui näiteks iga päev teha backupe siis kui seda rullida cronis üle päeva siis kustub vanem fail ära.
for DATA in `ls $BACKUPID`;
do
if [ $TEMP == 0 ]
then
TEMP=$DATA
elif [ $BACKUPID/$TEMP -nt $BACKUPID/$DATA ]
then
TEMP=$DATA
fi
done
rm -f $BACKUPID/$TEMP
Kui teatud vanus on vajalik siis tuleb kasutada gnu find utiliiti. Samas tuleb arvestada, et find ei arvesta faili loomisaega vaid seda millal teda on muudetud.
Ka findi kasutades ei tohiks olla raske kirjutada sellist skripti tuleb ainult määrata ära parameetrina kust ta otsib neid faile muidu kustuvad kõik failid ära mis on 2 päeva vanad
Ma lahendasin selle niimoodi, et kui mul on teatud arv backupe siis sisenen for loopi mis käib läbi kõik failid antud kaustast ja kustutab lihtsalt kõige vanema backupi ära. Kui näiteks iga päev teha backupe siis kui seda rullida cronis üle päeva siis kustub vanem fail ära.
for DATA in `ls $BACKUPID`;
do
if [ $TEMP == 0 ]
then
TEMP=$DATA
elif [ $BACKUPID/$TEMP -nt $BACKUPID/$DATA ]
then
TEMP=$DATA
fi
done
rm -f $BACKUPID/$TEMP
Kui teatud vanus on vajalik siis tuleb kasutada gnu find utiliiti. Samas tuleb arvestada, et find ei arvesta faili loomisaega vaid seda millal teda on muudetud.
Ka findi kasutades ei tohiks olla raske kirjutada sellist skripti tuleb ainult määrata ära parameetrina kust ta otsib neid faile muidu kustuvad kõik failid ära mis on 2 päeva vanad
"Thinking is the hardest work there is, which is probably the reason why so few engage in it" - Henry Ford
Mnjah kahjuks nii tark ma veel pole, et asja ise kokku paneks teiepoolt antud võimalustest. Muidugi aitäh tele kiirete vastuste eest.
johnsmith sinu versioon täiesti sobiks kui ma veel nüüd oskaks sinu versioonile ka muutujad ette anda ja selle tööle panna. Lihtsalt cronis paneks ta vastavalt iga tehtava backup töö järel jooksma ka kustutama vana faili.
johnsmith sinu versioon täiesti sobiks kui ma veel nüüd oskaks sinu versioonile ka muutujad ette anda ja selle tööle panna. Lihtsalt cronis paneks ta vastavalt iga tehtava backup töö järel jooksma ka kustutama vana faili.
Aga kui tahad kuupäeva järgi faile kontrollida, siis faili kuupäeva ja praeguse kuupäeva kujul aaaa-kk-pp saab teada näiteks sedasi:
Kood: Vali kõik
failikuupaev=$(stat -c %y failinimi)
failikuupaev=${failikuupaev%% *}
praegunekuupaev=$(date +%Y-%m-%d)
Ei kontrollida pole mul vaja. Lihtsalt kustutada failid, mis on vanemad kui 2 päeva (see aeg on hetkel lihtsalt optimaalne).
Testin sinu antud koodi jupikest. Aga saan ma õigesti aru, et selle +2 muutmisel näiteks +30-ks kustutatakse ära failid, mis on vanemad kui 30 päeva? Küsisin seda lihtsalt juhuks, et kui näiteks on vaja suuremat päevade arvu kasutada.kalamaja kirjutas:Äkki sobib midagi sellist. Antud näide kustutab siis kõik failid, mis on vanemad kui 2x24 tundi.Kood: Vali kõik
#!/bin/bash find /kaust/kust/otsida -type f -mtime +2 -exec rm -r {} \; > /dev/null
Ma mõtlesin selles mõttes, et kontrollid faili kuupäeva ja kui on vanem, kui vaja, siis kustutad ära.kustukas kirjutas:Ei kontrollida pole mul vaja. Lihtsalt kustutada failid, mis on vanemad kui 2 päeva (see aeg on hetkel lihtsalt optimaalne).
Eilse kuupäeva saab näiteks käsuga: date -d '1 day ago' +%Y-%m-%d
Ja siis kontrollid, kui on vanem kui eilne, siis kustutad ära.
Ma panen oma loomingu ka siia, et oleks valikuvõimalust
krt ma ei saa küll seda <code></code> tagisid tööle või teen ma midagi valesti......
Igatahes kui ma panen <code> siis sellisena ta ka mu postituses ilmub.
Kood: Vali kõik
BACKUPID="/mingi/directory"
TEMP=0
BACKUPIARV=`ls -l $BACKUPID | wc -l`
PIISAVALT=siia tuleb mingi arv nt 4
if [ $BACKUPIARV == $PIISAVALT ]
for DATA in `ls $BACKUPID`;
do
if [ $TEMP == 0 ]
then
TEMP=$DATA
elif [ $BACKUPID/$TEMP -nt $BACKUPID/$DATA ]
then
TEMP=$DATA
fi
done
rm -f $BACKUPID/$TEMP
fi
Igatahes kui ma panen <code> siis sellisena ta ka mu postituses ilmub.
Viimati muutis johnsmith, 09.05.2007, 20:37, muudetud 3 korda kokku.
"Thinking is the hardest work there is, which is probably the reason why so few engage in it" - Henry Ford
Ma oskasin seda vanasti teha küll aga nüüd enam ei õnnestu. Ole hea ja vaata mis nüüd siis valesti on.sander85 kirjutas:see peaks siiski olema [ code ] ja [ /code ]johnsmith kirjutas: krt ma ei saa küll seda <code></code> tagisid tööle või teen ma midagi valesti......
Igatahes kui ma panen <code> siis sellisena ta ka mu postituses ilmub.
"Thinking is the hardest work there is, which is probably the reason why so few engage in it" - Henry Ford





