Mails archivieren / Cron im Februar
Hallo, ich habe mir Cronjobs erstellt, mit denen ich meine Mails monatlich archiviere. Diese werden am letzten Tag eines Monats um 23:55 aufgerufen. Ich habe die Unterscheidung für 30 und 31 Tage schon hinbekommen. Meine crontab: [...] 55 23 30 1,3,5,7,9,11 * mkdir /home/rene/Mail-Archiv 2&> /dev/null && cd /home/rene/Mail && for i in *; do mkdir /home/rene/Mail-Archiv/$i 2&> /dev/null ; done && for i in *; do mv $i /home/rene/Mail-Archiv/$i/$i-`date +%Y-%m`; done 55 23 31 4,6,8,10,12 * mkdir /home/rene/Mail-Archiv 2&> /dev/null && cd /home/rene/Mail && for i in *; do mkdir /home/rene/Mail-Archiv/$i 2&> /dev/null ; done && for i in *; do mv $i /home/rene/Mail-Archiv/$i/$i-`date +%Y-%m`; done [...] Wie mache ich das für Februar? Denn da muß ich ja auf 28 und 29 Tage kommen und wenn ich das zweimal einmal mit "28 2" und "29 2" eintrage, dann führt er das ja zweimal aus, was in dem Fall fatal wäre. Ideen? Grüße Rene
Rene Engelhard schrieb:
Hallo,
ich habe mir Cronjobs erstellt, mit denen ich meine Mails monatlich archiviere. Diese werden am letzten Tag eines Monats um 23:55 aufgerufen.
Ich habe die Unterscheidung für 30 und 31 Tage schon hinbekommen. [...] Wie mache ich das für Februar? Denn da muß ich ja auf 28 und 29 Tage kommen und wenn ich das zweimal einmal mit "28 2" und "29 2" eintrage, dann führt er das ja zweimal aus, was in dem Fall fatal wäre.
Und wenn Du das immer am 1. jedes Monats um 0:01 aufrufst? -- Grüße, Bert
Bert Blümer wrote:
Und wenn Du das immer am 1. jedes Monats um 0:01 aufrufst?
Ich hatte das mal so, aber meine Platte crashte (ich habe natürlich kein Backup gehabt) und ich habe den Befehl nicht mehr, womit ich date anweisen kann, das Datum von vor 15 Tagen zu nehmen (15 days ago weiß ich, aber nicht wie ich es in Date einbauen kann). Deswegen so. Wenn mir natürlich eine(r) auf die Sprünge hilft mit den 15 Tagen, dann kann ich das auch am 1. um 0:01 laufen lassen... Rene
* Rene Engelhard schrieb am 22.Nov.2001:
Bert Blümer wrote:
Und wenn Du das immer am 1. jedes Monats um 0:01 aufrufst?
Ich hatte das mal so, aber meine Platte crashte (ich habe natürlich kein Backup gehabt) und ich habe den Befehl nicht mehr, womit ich date anweisen kann, das Datum von vor 15 Tagen zu nehmen (15 days ago weiß ich, aber nicht wie ich es in Date einbauen kann).
date --date "15 days ago" Bernd -- Hast Du bei Problemen schon in der SuSE-Support-Datenbank (SDB) nachgesehen? Auf Deinem Rechner: http://localhost/doc/sdb/de/html/index.html | mit Apache: http://localhost/doc/sdb/de/html/key_form.html | Zufalls- Tagesaktuell bei SuSE: http://sdb.suse.de/sdb/de/html/index.html | signatur 2
Bernd Brodesser wrote:
* Rene Engelhard schrieb am 22.Nov.2001:
Bert Blümer wrote:
Und wenn Du das immer am 1. jedes Monats um 0:01 aufrufst?
Ich hatte das mal so, aber meine Platte crashte (ich habe natürlich kein Backup gehabt) und ich habe den Befehl nicht mehr, womit ich date anweisen kann, das Datum von vor 15 Tagen zu nehmen (15 days ago weiß ich, aber nicht wie ich es in Date einbauen kann).
date --date "15 days ago"
Danke. Ist mir auch wieder eingefallen. Aber warum (siehe auch andere Mail) wird das nicht in man date erklärt? Rene
Rene Engelhard wrote:
Ich hatte das mal so, aber meine Platte crashte (ich habe natürlich kein Backup gehabt) und ich habe den Befehl nicht mehr, womit ich date anweisen kann, das Datum von vor 15 Tagen zu nehmen (15 days ago weiß ich, aber nicht wie ich es in Date einbauen kann).
Deswegen so. Wenn mir natürlich eine(r) auf die Sprünge hilft mit den 15 Tagen, dann kann ich das auch am 1. um 0:01 laufen lassen...
Hat sich erledigt. -d ist mir wieder eingefallen. Aber warum erklärt man date -d nicht??? Crontab: [...] 1 0 1 * * mkdir /home/rene/Mail-Archiv 2&> /dev/null && cd /home/rene/Mail && for i in *; do mkdir /home/rene/Mail-Archiv/$i 2&> /dev/null ; done && for i in *; do mv $i /home/rene/Mail-Archiv/$i/$i-`date -d "15 days ago" +%Y-%m`; done [...] Rene
* Rene Engelhard schrieb am 22.Nov.2001:
Rene Engelhard wrote:
Ich hatte das mal so, aber meine Platte crashte (ich habe natürlich kein Backup gehabt) und ich habe den Befehl nicht mehr, womit ich date anweisen kann, das Datum von vor 15 Tagen zu nehmen (15 days ago weiß ich, aber nicht wie ich es in Date einbauen kann).
Deswegen so. Wenn mir natürlich eine(r) auf die Sprünge hilft mit den 15 Tagen, dann kann ich das auch am 1. um 0:01 laufen lassen...
Hat sich erledigt. -d ist mir wieder eingefallen. Aber warum erklärt man date -d nicht???
info date Bernd -- ROTFL = Rolling On The Floor, Laughing = Auf dem Boden wälzen, lachend. SCNR = Sorry, Could Not Resist = Sorry, Ich konte nicht wiederstehen. AFAIK = As Far As I Know = So weit ich weis|BTW = By The Way = Nebenbei bemerkt IMHO = In My Humble Opinion = meiner bescheidenen Meinung nach |Zufallssig. 9
On Thu, Nov 22, 2001 at 03:22:22PM +0100, Rene Engelhard wrote:
Rene Engelhard wrote:
Ich hatte das mal so, aber meine Platte crashte (ich habe natürlich kein Backup gehabt) und ich habe den Befehl nicht mehr, womit ich date anweisen kann, das Datum von vor 15 Tagen zu nehmen (15 days ago weiß ich, aber nicht wie ich es in Date einbauen kann).
Deswegen so. Wenn mir natürlich eine(r) auf die Sprünge hilft mit den 15 Tagen, dann kann ich das auch am 1. um 0:01 laufen lassen...
Hat sich erledigt. -d ist mir wieder eingefallen. Aber warum erklärt man date -d nicht???
Crontab: [...] 1 0 1 * * mkdir /home/rene/Mail-Archiv 2&> /dev/null && cd /home/rene/Mail && for i in *; do mkdir /home/rene/Mail-Archiv/$i 2&> /dev/null ; done && for i in *; do mv $i /home/rene/Mail-Archiv/$i/$i-`date -d "15 days ago" +%Y-%m`; done [...]
Sag mal. Ist das nicht ein bißchen problematisch? IIRC läft Dein Crontab doch nur 1 Mal: # ls -ld Mail drwx------ 2 root root 90 Nov 13 15:15 Mail # mkdir Mail mkdir: cannot create directory `Mail': File exists # echo $? 1 Außerdem: man bash ; /\&\& und ein paar Mal n drücken The control operators && and || denote AND lists and OR lists, respectively. An AND list has the form command1 && command2 command2 is executed if, and only if, command1 returns an exit status of zero. Das sieht mir nicht gut aus. Da glaub ich, wäre ein Skript besser. Ich wollte das nämlich grad mal so abkupfern ;) -- Gruß Alex
Alex Klein wrote:
On Thu, Nov 22, 2001 at 03:22:22PM +0100, Rene Engelhard wrote: Sag mal. Ist das nicht ein bißchen problematisch? IIRC läft Dein Crontab doch nur 1 Mal:
# ls -ld Mail drwx------ 2 root root 90 Nov 13 15:15 Mail # mkdir Mail mkdir: cannot create directory `Mail': File exists # echo $? 1
Außerdem:
man bash ; /\&\& und ein paar Mal n drücken
The control operators && and || denote AND lists and OR lists, respectively. An AND list has the form
command1 && command2
command2 is executed if, and only if, command1 returns an exit status of zero. Das sieht mir nicht gut aus. Da glaub ich, wäre ein Skript besser. Ich wollte das nämlich grad mal so abkupfern ;)
Ja, da habe ich wohl die Übersicht verloren. Das angehängte Skript (geht das durch den Filter durch?) ist übersichtlicher und wird dann hoffentlich auch funktionieren. Rene
-- Gruß
Alex
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Rene Engelhard wrote: [Quoting von Grüssen und 2x SuSE-footer] Sorry dafür. Habe nicht genug aufgepasst. Rene
Rene Engelhard wrote:
Ja, da habe ich wohl die Übersicht verloren. Das angehängte Skript (geht das durch den Filter durch?) ist übersichtlicher und wird dann hoffentlich auch funktionieren.
Da hat sich noch ein kleines Problem eingeschliche, ist jetzt aber gelöst. (echo $i) Deswegen hier das nocheinmal korrigierte Skript. Ich habe es gerade getestet und es funktioniert einwandfrei. Rene
Hallo Rene Engelhard, * Am 22.11.2001 zauberte Rene Engelhard:
Rene Engelhard wrote:
Ja, da habe ich wohl die Übersicht verloren. Das angehängte Skript (geht das durch den Filter durch?) ist übersichtlicher und wird dann hoffentlich auch funktionieren.
Da hat sich noch ein kleines Problem eingeschliche, ist jetzt aber gelöst. (echo $i)
Deswegen hier das nocheinmal korrigierte Skript. Ich habe es gerade getestet und es funktioniert einwandfrei.
Hier finde ich nirgendwo ein korregiertes Skript *Stein_heb_hoch_guck* *hinter_Tür_schau* Nee, wirklich nicht. :( -- Gruß Alex
Hallo Rene Engelhard, * Am 22.11.2001 zauberte Rene Engelhard: [...]
Ja, da habe ich wohl die Übersicht verloren. Das angehängte Skript (geht das durch den Filter durch?) ist übersichtlicher und wird dann hoffentlich auch funktionieren.
Vielleicht ist es so eine Spur besser: -----------------8<------------------ #!/bin/bash if ! test -d /home/rene/Mail-Archiv mkdir /home/rene/Mail-Archiv fi cd /home/rene/Mail for i in *; do mkdir /home/rene/Mail-Archiv/$i done for i in *; do mv $i /home/rene/Mail-Archiv/$i/$i-`date -d "15 days ago" +"%Y-%m"` done -----------------8<------------------ Beim Aufruf des Skripts stin und stout zusammenlegen und ins Nirvana senden. Ist aber nur ein Vorschlag (ungetestet), wird man vielleicht auch merken ;) -- Gruß Alex
Alex Klein wrote:
Hallo Rene Engelhard,
* Am 22.11.2001 zauberte Rene Engelhard: [...]
Ja, da habe ich wohl die Übersicht verloren. Das angehängte Skript (geht das durch den Filter durch?) ist übersichtlicher und wird dann hoffentlich auch funktionieren.
Vielleicht ist es so eine Spur besser:
-----------------8<------------------ #!/bin/bash
if ! test -d /home/rene/Mail-Archiv mkdir /home/rene/Mail-Archiv fi cd /home/rene/Mail for i in *; do mkdir /home/rene/Mail-Archiv/$i done
Wenn schon mit test, dann hier auch. Werde ich einbauen. for i in *; do if ! test -d /home/rene/Mail-Archiv/$i mkdir /home/rene/Mail-Archiv/$i fi done
for i in *; do mv $i /home/rene/Mail-Archiv/$i/$i-`date -d "15 days ago" +"%Y-%m"` done
Grüße Rene
Hi, so, es läuft. Alexm Du hattest das then vergessen. Hier das fertige und verbesserte Skript in v1.1.1 angehängt. Grüße Rene
Rene Engelhard wrote:
Hier das fertige und verbesserte Skript in v1.1.1 angehängt.
So, das ist jetzt aber die letzte Version (1.2). Sie ist ausgeiebig getestet worden (von mir). Ich habe es noch universieller vewendbar gemacht. $LOGNAME ist der Username, er ist im bash-Environment und auch im beschränkteren cron-ENvironment automatisch definiert. Ich hänge hier *nicht* das neue Skript an, sondern zur Abwechslung mal ein diff. In das Verzeichnis wo das alte v.1.1.1er Skript liegt kopieren und dann mit patch -p0 < oldmails.sh_patch_1.1.1-1.2.patch einspielen. Rene
Hallo Rene Engelhard, * Am 22.11.2001 zauberte Rene Engelhard:
Rene Engelhard wrote:
Hier das fertige und verbesserte Skript in v1.1.1 angehängt.
So, das ist jetzt aber die letzte Version (1.2). Sie ist ausgeiebig getestet worden (von mir).
Hab nebenbei auch entwickelt und getestet :) Ergebnis ---8<----------- #!/bin/bash if ! test -d /home/$USER/Mail-Archiv; then mkdir /home/$USER/Mail-Archiv fi cd /home/$USER/Mail FILES=`ls -d *` DATE=`date "-d 15 days ago" +%Y-%m` if test -n "$FILES"; then for i in $FILES; do echo $i cp -R $i /home/$USER/Mail-Archiv/$i-$DATE if test -f $i; then gzip /home/$USER/Mail-Archiv/$i-$DATE fi done fi ---8<----------- -- Gruß Alex
Alex Klein wrote:
#!/bin/bash
if ! test -d /home/$USER/Mail-Archiv; then ^^^^^ Wenn man das so in cron einbindet, geht das schief, da in cron $USER nicht existiert. Deswegen habe ich ja auch $LOGNAME da stehen, IIRC indentisch aber funktioniert überall.
mkdir /home/$USER/Mail-Archiv fi cd /home/$USER/Mail
FILES=`ls -d *` DATE=`date "-d 15 days ago" +%Y-%m`
OK.
if test -n "$FILES"; then
Ist der Test nicht überflüssig? Wenn da nichts ist, dann wird man das Skript auch nicht einsetzen wollen...
for i in $FILES; do echo $i cp -R $i /home/$USER/Mail-Archiv/$i-$DATE if test -f $i; then gzip /home/$USER/Mail-Archiv/$i-$DATE
Warum gzip? Dann kann ich ja meine Archive ohne weiteres nicht mehr mit mutt anschauen und durchsuchen. (Ich habe da mal gehört, man könne mit einigen hooks und einem patch auch gzip'te folder lesen.. Ich hatte das mal, aber ich habe ja vor einigen Mails schon den Datenverlust geschildert.. Wie geht das? Wo kann ich das evtl. nachlesen? Was brauche ich dafür?) Rene
On Thu, 22 Nov 2001, Rene Engelhard wrote:
Dann kann ich ja meine Archive ohne weiteres nicht mehr mit mutt anschauen und durchsuchen.
Doch. Mit zgrep und grepmail kann auch mit den gzippten foldern.
(Ich habe da mal gehört, man könne mit einigen hooks und einem patch auch gzip'te folder lesen.. Ich hatte das mal, aber ich habe ja vor einigen Mails schon den Datenverlust geschildert.. Wie geht das? Wo kann ich das evtl. nachlesen? Was brauche ich dafür?)
Such auf ftp://ftp.mutt.org (irgendwo "unter" mutt nach patch-<MUTTVERSION>.rr.compressed... Die Hooks sind bei mir (bin mir nicht _ganz_ sicher, ob das die richtigen sind): open-hook "\.gz$" "gzip -cd %f > %t" close-hook "\.gz$" "gzip -9 -c %t > %f" append-hook "\.gz$" "gzip -9 -c %t >> %f" -dnh -- 122: Updateritis Softwarebulemie (Frank Klemm)
David Haller wrote:
On Thu, 22 Nov 2001, Rene Engelhard wrote:
Dann kann ich ja meine Archive ohne weiteres nicht mehr mit mutt anschauen und durchsuchen.
Doch. Mit zgrep und grepmail kann auch mit den gzippten foldern.
[...]
Such auf ftp://ftp.mutt.org (irgendwo "unter" mutt nach patch-<MUTTVERSION>.rr.compressed...
Im SusE 7.2 mutt sind die wie ich gerade herausgefunden habe an- scheinend schon drin..
Die Hooks sind bei mir (bin mir nicht _ganz_ sicher, ob das die richtigen sind):
open-hook "\.gz$" "gzip -cd %f > %t" close-hook "\.gz$" "gzip -9 -c %t > %f" append-hook "\.gz$" "gzip -9 -c %t >> %f"
Die funktionieren. Sind also die richtigen. Rene
Alex Klein wrote:
DATE=`date "-d 15 days ago" +%Y-%m`
Übernommen.
if test -n "$FILES"; then for i in $FILES; do echo $i cp -R $i /home/$USER/Mail-Archiv/$i-$DATE if test -f $i; then gzip /home/$USER/Mail-Archiv/$i-$DATE
Kompression wird bei mir nur auf Wunsch aktiviert: mit oldmails.sh --compress bzw. oldmails.sh -c Das Skript maile ich gleich rum... Rene
Hallo Rene, On Thu, 22 Nov 2001, Rene Engelhard wrote: [..] Noch ein paar Aenderungen:
if ! test -d /home/rene/Mail-Archiv then mkdir /home/rene/Mail-Archiv fi
MAILDIR="/home/rene/Mail" ARCHIVDIR="/home/rene/Mail-Archiv" test -d "$ARCHIVDIR" || mkdir -p "$ARCHIVDIR"
cd /home/rene/Mail for i in *; do if ! test -d /home/rene/Mail-Archiv/$i; then mkdir /home/rene/Mail-Archiv/$i; fi done for i in *; do mv $i /home/rene/Mail-Archiv/$i/$i-`date -d "15 days ago" +"%Y-%m"` done
DATE="`date -d '15 days ago' '+%Y-%m'`" pushd "$MAILDIR" for mbox in *; do test -d "${ARCHIVDIR}/${mbox}" || mkdir -p "${ARCHIVDIR}/${mbox}" mv "${mbox}" "${ARCHIVDIR}/${mbox}/${mbox}-${DATE}" done popd Man sollte die Variablen moeglichst immer quoten und bei Zusammen- setzungen mit ${VARNAME} auf die Variable zugreifen. Bsp: D="A"; DE="DE"; echo "$DE"; echo "${D}E"; Insbesondere bei Dateinamen kann das u.U. "boese" Folgen haben... -dnh -- WANTED: Schroedingers Cat, dead or alive.
David Haller wrote:
Hallo Rene,
On Thu, 22 Nov 2001, Rene Engelhard wrote: [..]
Noch ein paar Aenderungen:
if ! test -d /home/rene/Mail-Archiv then mkdir /home/rene/Mail-Archiv fi
MAILDIR="/home/rene/Mail" ARCHIVDIR="/home/rene/Mail-Archiv"
Übernommen.
test -d "$ARCHIVDIR" || mkdir -p "$ARCHIVDIR"
if, then, fi ist (zumindest für mich) schöner... [...]
DATE="`date -d '15 days ago' '+%Y-%m'`"
OK, sinnvoll.
pushd "$MAILDIR" for mbox in *; do test -d "${ARCHIVDIR}/${mbox}" || mkdir -p "${ARCHIVDIR}/${mbox}" mv "${mbox}" "${ARCHIVDIR}/${mbox}/${mbox}-${DATE}" done popd
Was zum teufel tuen pushd und popd? Habe ich nicht übernommen, ist mir zu unübersichtlich...
Man sollte die Variablen moeglichst immer quoten und bei Zusammen- setzungen mit ${VARNAME} auf die Variable zugreifen.
Bsp: D="A"; DE="DE"; echo "$DE"; echo "${D}E";
Insbesondere bei Dateinamen kann das u.U. "boese" Folgen haben...
Das stimmt. Habe ich und werde ich in zukünftigen Skripten beherzigen. Rene
On Thu, 22 Nov 2001, Rene Engelhard wrote:
David Haller wrote:
test -d "$ARCHIVDIR" || mkdir -p "$ARCHIVDIR"
if, then, fi ist (zumindest für mich) schöner...
Naja, bei einem Befehl ist das Geschmackssache, ich find's so uebersichtlicher. Vergleiche: "Teste ob's $DIR gibt ODER leg's an" ;) mit "Wenn der Test ob's $DIR gibt NICHT erfolgreich ist, dann leg's an" Und du verwendest ja auch ! was genau so ein Operator wie || ist. Aber egal, Geschmackssache. Solange man nicht mit: test -d $DIR if $? = 0 ... daherkommt ;)) Bei mehreren Befehlen ist dann if ..; then ... fi natuerlich uebersichtlicher :)
pushd "$MAILDIR" for mbox in *; do test -d "${ARCHIVDIR}/${mbox}" || mkdir -p "${ARCHIVDIR}/${mbox}" mv "${mbox}" "${ARCHIVDIR}/${mbox}/${mbox}-${DATE}" done popd
Was zum teufel tuen pushd und popd? Habe ich nicht übernommen, ist mir zu unübersichtlich...
help pushd, help popd und siehe die Antworten auf Alex's Frage dazu. -dnh -- Some days it just doesn't pay to get out of bed long enough to hit the snooze button. -- Eric The Read in asr
Hallo David, * Am 23.11.2001 zauberte David Haller:
On Thu, 22 Nov 2001, Rene Engelhard wrote: [...] DATE="`date -d '15 days ago' '+%Y-%m'`" pushd "$MAILDIR" for mbox in *; do test -d "${ARCHIVDIR}/${mbox}" || mkdir -p "${ARCHIVDIR}/${mbox}" mv "${mbox}" "${ARCHIVDIR}/${mbox}/${mbox}-${DATE}" done popd
David, bitte, bitte, bitte erklären. Ich hab mal in die mans pages geguckt. directory stack schön und gut, wofür ist das gut? Mit pushd liest Du ihn ein, mit popd löscht Du ihn. Was machst Du dazwischen mit ihm?
Man sollte die Variablen moeglichst immer quoten und bei Zusammen- setzungen mit ${VARNAME} auf die Variable zugreifen.
Bsp: D="A"; DE="DE"; echo "$DE"; echo "${D}E"; Super, wird sich gemerkt!
Insbesondere bei Dateinamen kann das u.U. "boese" Folgen haben... Hatten wir glaub ich auch mal vor kurzem. Ist schön, wenn man immer wieder mal was dazu lernt :)
-- WANTED: Schroedingers Cat, dead or alive. Wenn Du schon am erklären bist, dann mach bei Deiner Sig weiter ;)
Danke schonmal dafür! -- Gruß Alex
Hallo Alex, * Alex Klein schrieb am 23.Nov.2001:
* Am 23.11.2001 zauberte David Haller:
DATE="`date -d '15 days ago' '+%Y-%m'`" pushd "$MAILDIR" for mbox in *; do test -d "${ARCHIVDIR}/${mbox}" || mkdir -p "${ARCHIVDIR}/${mbox}" mv "${mbox}" "${ARCHIVDIR}/${mbox}/${mbox}-${DATE}" done popd
David, bitte, bitte, bitte erklären. Ich hab mal in die mans pages geguckt. directory stack schön und gut, wofür ist das gut? Mit pushd liest Du ihn ein, mit popd löscht Du ihn. Was machst Du dazwischen mit ihm?
Probier es doch aus. Sage pushd /etc und Du bist im /etc danach pushd /usr und Du bist in /usr, wenn Du dann popd sagst bist Du wieder in /etc zurück, und wenn Du dann nochmal popd sagst bist Du wieder im Verzeichniß, wo Du ursprünglich warst. Funktioniert im Skript aber auch an der Kommandozeile -- Wie fast alles bei der bash. Da ich das ganze Skript jetzt nicht kenne, weiß ich allerdings nicht, warum es wichtig ist, wieder zurückzuspringen.
WANTED: Schroedingers Cat, dead or alive. Wenn Du schon am erklären bist, dann mach bei Deiner Sig weiter ;)
Du kennst Schrödingers Katze? Ist ein Gedankenexperiment der Quantenphysik. Dabei geht es darum, daß man eine Katze in einer Box steckt und sie durch ein Quantenereignis tötet. Solange man nicht nachschaut, ob sie Tod oder lebendig ist, ist sie zu 50% Tot, oder so ähnlich. ;) Bernd -- LILO funktioniert nicht? Hast Du /etc/lilo.conf verändert und vergessen, lilo aufzurufen? Ist Deine /boot-Partition unter der 1024 Zylindergrenze? Bei anderen LILO Problemen mal in der SDB nachschauen: http://localhost/doc/sdb/de/html/rb_bootdisk.html |Zufallssignatur 6
On Fri, 23 Nov 2001, Alex Klein wrote:
* Am 23.11.2001 zauberte David Haller:
On Thu, 22 Nov 2001, Rene Engelhard wrote: [...] DATE="`date -d '15 days ago' '+%Y-%m'`" pushd "$MAILDIR" for mbox in *; do test -d "${ARCHIVDIR}/${mbox}" || mkdir -p "${ARCHIVDIR}/${mbox}" mv "${mbox}" "${ARCHIVDIR}/${mbox}/${mbox}-${DATE}" done popd
David, bitte, bitte, bitte erklären.
Gern. Aber das hat Bernd schon sehr schoen gemacht :)
Ich hab mal in die mans pages geguckt.
Bei sowas (shell-builtins) ist 'help' wesentlich uebersichtlicher.
directory stack schön und gut, wofür ist das gut? Mit pushd liest Du ihn ein, mit popd löscht Du ihn. Was machst Du dazwischen mit ihm?
Nix. Probiers einfach mal aus. Ich glaub zwar, da das script ja in ner sub-shell laeuft ist's egal, aber z.B. wenn man innerhalb eines Scripts hin- und herwechselt ist es sehr hilfreich. z.B.: for dir in `find . -type d`; do pushd $dir ## wechsle nach $dir (z.B. /home/foo/bar/baz du -hs . ## mach ein von . (also von /home/foo/bar/baz) popd ## und zurueck -> /home done du -hs . popd wirkt also wie ein 'cd -' aber eben nicht nur zum letzten Verz. sondern bis ueber n-fach.
-- WANTED: Schroedingers Cat, dead or alive. Wenn Du schon am erklären bist, dann mach bei Deiner Sig weiter ;)
Ebenfalls siehe Bernd's mail :) -dnh, patting the sigmonster!!! PS: Ja, die sig _IST_ Zufall! :))) -- Aber warum willst Du den Rechner eigentlich herunterfahren? Linux- rechner bootet man nicht alle paar Tage, sondern alle paar Monate, wenn man einen neuen Kernel installiert hat oder neue Hardware integrieren will und dafür den Strom abstellen muß. --- Bernd Brodesser
Hier die v.1.5 mit den guten Anregungen von Alex und David. Ich habe das ein wenig verändert und einiges ausgelassen. Auch habe ich manches mit Kommandooptionen geregelt (z.B Komp. an/aus) Das Skript verhindert von sich aus, an einem anderen Tag ausgeführt zu werden, als an einem 1. eines Monats, da dies ja nicht sinnvoll ist. Rene
On Fri, 23 Nov 2001, Rene Engelhard wrote:
Hier die v.1.5 mit den guten Anregungen von Alex und David. Ich habe das ein wenig verändert und einiges ausgelassen. Auch habe ich manches mit Kommandooptionen geregelt (z.B Komp. an/aus)
Hm. Du wertest die Optionen ein wenig umstaendlich aus, die sollte man eher "auf einen Rutsch" (also in einem case) auswerten... ,----[ oldmails.sh ] | #!/bin/bash [..] | MAILDIR=/home/"$LOGNAME"/Mail | ARCHIVMAILDIR=/home/"$LOGNAME"/Mail-Archiv Flasch. (auch wenn's funktioniert). Richtig: MAILDIR="/home/${LOGNAME}/Mail" ARCHIVMAILDIR="/home/${LOGNAME/Mail-Archiv" | # if --help or -h is given to this script print a help meassage | case $1 in | --help|-h) [Hilfetext] | # exit this script due we do not have to do anything here | exit 0 | ;; | *) | ;; | esac Hier ist besser eine Funktion oder Variable angebracht: usage() { [Hilfetext] } oder usage="USAGE: `basename $0` [OPTIONEN] Hilfetext "; und dann: case "$1" in ## ja, hier sollte man quoten! -h|--h*) usage(); exit 0; # oder echo "$usage"; exit 0; ;; | DAY="`date +'%d'`" | case $DAY in | 01) | ;; | *) | # exit because the script was not started on first of a month | # and due to this this makes less sense to run this script | echo "This script is designed to run on the first of each month" | echo "We recommend to put it in your crontab like this:" | echo "1 0 1 * * /path/to/this/script" | exit 1 | ;; | esac Das sollte vor das case "$1". | # create directory to save the archives if it was not created yet | if ! test -d $ARCHIVMAILDIR | then | mkdir $ARCHIVMAILDIR | fi ok. Auch wenn mir mein Einzeiler besser gefaellt ;) Wozu hattest du im folgendem immer noch 2 for-Schleifen? | cd $MAILDIR | for mbox in *; | do | # if the mailfolder does not have his own directory in the | # archive yet, we create it | if ! test -d "${ARCHIVMAILDIR}/${mbox}" | then | # for every mailfolder in ~/Mail we want a extra folder in | # the archive | mkdir "${ARCHIVMAILDIR}/${mbox}" | fi | case $1 in | --compress|-c) | # move the mailfolder to his archive location ... | mv ${mbox} "${ARCHIVMAILDIR}/${mbox}/${mbox}-$DATE" | # ... and compress it with gzip | gzip -9 "${ARCHIVMAILDIR}/${mbox}/${mbox}-$DATE" | ;; | *) | # only moving the mailfolder to his archive location | mv ${mbox} "${ARCHIVMAILDIR}/${mbox}/${mbox}-$DATE" | ;; | esac | done So, hier machst du weiter mit der Optionen Auswertung... Naja. Ich wuerde das Script also so schreiben: COMPRESS="gzip -v9" DO_COMPRESS="no" ## default festlegen [DEF. von usage, s.o.] [test auf's Datum, ggfs. exit, s.o.] case "$1" in -h|--h*) usage; exit 0;; -c|--c*) DO_COMPRESS="yes";; *) DO_COMPRESS="no";; esac cd "$MAILDIR" for mbox in *; do ## Kommentare hab ich weggelassen und ich nehm wieder den Einzeiler mboxdir="${ARCHIVMAILDIR}/${mbox}" ## quoten nicht vergessen [1] test -d "${mboxdir}" || mkdir -p "${mboxdir}" mv "${mbox}" "${mboxdir}/${mbox}-${DATE}" if test "x$COMPRESS" = "xyes"; then $COMPRESS "${mboxdir}/${mbox}-${DATE}" fi done Insbesondere halte ich es fuer uebersichtlicher nur eine Schleife ueber alle Mailboxen zu haben... -dnh [1] Die extra Variable ist primaer wg. der Zeilenlaenge -- So wear a black tie. And a black armband. And if PHB asks you who died, say something like "my respect for you as a manager". -- Tanuki
On Thu, 22 Nov 2001, Rene Engelhard wrote:
Hat sich erledigt. -d ist mir wieder eingefallen. Aber warum erklärt man date -d nicht???
Tut es (gleich als erste Option): OPTIONS -d datestr, --date=datestr Display the time and date specified in datestr, which can be in almost any common format. The dis play is in the default output format, or if an argument starting with `+' is given to date, in the format specified by that argument. Die Uebersetzung ist aber gnadenlos unvollstaendig... Ich habe es bei mir so eingestellt, dass grundsaetzlich die engli- schen manpages aufgerufen werden, aber ich kann auch gut Englisch. Generell sollte man aber IMO immer _auch_ in die englische manpage schauen ('man -L en date'), um zu sehen, ob die Uebersetzung voll- staendig ist, oder eben nicht.... man ls ist uebrigens auch so ein Fall wo die Uebersetzung lueckenhaft ist. Wenn die Uebersetzung ok ist, dann kann man die ja verwenden, ansonsten ist sollte man sich besser an das englische Original halten. Als Hilfe laesst sich z.B. ein alias fuer de bzw. en definieren: "alias mane='man -L en'" und "alias mand='man -L de'" um explizit eine bestimmte Sprachvariante aufzurufen. -dnh -- NT is the only OS that has caused me to beat a piece of hardware to death with my bare hands. -- Derry Hamilton
David Haller wrote:
Ich habe es bei mir so eingestellt, dass grundsaetzlich die engli- schen manpages aufgerufen werden, aber ich kann auch gut Englisch.
Generell sollte man aber IMO immer _auch_ in die englische manpage schauen ('man -L en date'), um zu sehen, ob die Uebersetzung voll- staendig ist, oder eben nicht.... man ls ist uebrigens auch so ein Fall wo die Uebersetzung lueckenhaft ist. Wenn die Uebersetzung ok ist, dann kann man die ja verwenden, ansonsten ist sollte man sich besser an das englische Original halten. Als Hilfe laesst sich z.B. ein alias fuer de bzw. en definieren: "alias mane='man -L en'" und "alias mand='man -L de'" um explizit eine bestimmte Sprachvariante aufzurufen.
Das mit dem Englisch ist bei mir auch kein Problem. Danke für den Tip. Werde ich genauso machen, wie Du vorgeschlagen hast. Rene
From: Rene Engelhard [mailto:mail@rene-engelhard.de]
Hallo Rene,
Hallo,
ich habe mir Cronjobs erstellt, mit denen ich meine Mails monatlich archiviere. Diese werden am letzten Tag eines Monats um 23:55 aufgerufen.
Ich habe die Unterscheidung für 30 und 31 Tage schon hinbekommen.
Meine crontab:
[...] 55 23 30 1,3,5,7,9,11 * mkdir /home/rene/Mail-Archiv 2&> /dev/null && cd /home/rene/Mail && for i in *; do mkdir /home/rene/Mail-Archiv/$i 2&> /dev/null ; done && for i in *; do mv $i /home/rene/Mail-Archiv/$i/$i-`date +%Y-%m`; done 55 23 31 4,6,8,10,12 * mkdir /home/rene/Mail-Archiv 2&> /dev/null && cd /home/rene/Mail && for i in *; do mkdir /home/rene/Mail-Archiv/$i 2&> /dev/null ; done && for i in *; do mv $i /home/rene/Mail-Archiv/$i/$i-`date +%Y-%m`; done [...]
Wie mache ich das für Februar? Denn da muß ich ja auf 28 und 29 Tage kommen und wenn ich das zweimal einmal mit "28 2" und "29 2" eintrage, dann führt er das ja zweimal aus, was in dem Fall fatal wäre.
Ideen?
Ganz "doofe" Variante: Mach es doch am 1. um 00:05 Uhr Christian
participants (6)
-
Alex Klein
-
B.Brodesser@t-online.de
-
Bert Blümer
-
Christian Herzyk
-
David Haller
-
Rene Engelhard