Kode: Vælg alt
dump.sql.gz.1
I princippet kan roteringen udtrykkes ret let
Kode: Vælg alt
if [ -e "/home/backup/dump.sql.gz.3" ] ; then
mv /home/backup/dump.sql.gz.3 /home/backup/dump.sql.gz.4
fi
if [ -e "/home/backup/dump.sql.gz.2" ] ; then
mv /home/backup/dump.sql.gz.2 /home/backup/dump.sql.gz.3
fi
if [ -e "/home/backup/dump.sql.gz.1" ] ; then
mv /home/backup/dump.sql.gz.1 /home/backup/dump.sql.gz.2
fi
Men er det ikke muligt at gøre det bedre? Alene det at koden fylder meget og ikke er fleksibel syntes jeg er et problem, men jeg ville også gerne at koden var tolerant overfor fejl, som fx det at den tjekker om dumpet findes inden den prøver på at omdøbe filen.
Jeg kigger på en "for - in - do", opbygget sådan her, til at gøre arbejdet
Kode: Vælg alt
for x in "$LIST" ; do
if [ "$x" = "dump.sql.gz.[1-7]" ] ; then
mv $x (og her skal filnavnet hæves med 1)
fi
done
Problemet med den kode er at den ganske enkelt ikke virker, og jeg har også prøvet med en simplere opbygning, hvor "if" skal matche et bestemt dump, og slette det. Det virkede heller ikke.
"ls" virker desuden ikke som forventet, for lige meget hvilket flag jeg bruger, så er outputtet på 1 linie, og det kan "if" åbenbart ikke matche til noget.
---
Så spørgsmålet er, hvad er den bedste kurs herfra:
Hvordan kan en liste over de filer der skal roteres, blive givet videre til "for" i et format den kan bruge?
Kan "for" konstruktionen overhovedet reddes?
At bruge en "while" eller noget tredje i stedet, og i givet fald, hvilken og hvorfor?
Eller måske logrotate?