[linux-l] Probleme mit Cleanupscript

Roland Penzin roland at penzin.de
Fr Jul 11 08:16:10 CEST 2003


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Am Donnerstag, 10. Juli 2003 08:18 schrieb Ihno Krumreich:
> On Tue, Jul 08, 2003 at 04:16:32PM +0200, Jens Dreger wrote:
> > On Tue, Jul 08, 2003 at 03:24:50PM +0200, Dani Oderbolz wrote:
> > > Hmm, wieder mal ein Quotingproblem.
> > > Auf jeden Fall vielen Dank, das hat geholfen.
> > > Nur steht nun schon das n?chste Problem an:
> > > ich m?chte in meiner Konfiguration einstellen k?nnen, was denn
> > > mit alten Dateien passiert.
> > > Ich mache dazu folgendes im Konfigfile:
> > >
> > > # Verzeichnis    Pattern    Suchtiefe    Zeit_in_Tagen Kommando (
> > > \{\} bezeichnet die aktuelle Datei)
> > > /home/admin/log    *    1    30    "/bin/mv \{\}
> > > /home/admin/log/old/ \;"
> > >
> > > Das Script macht dann dieses:
> > > find "${DIRECTORY}" -name "${PATTERN}" -maxdepth "${MAXDEPTH}"
> > > -mtime +"${MTIME}" -exec "${COMMAND}"
> > >
> > > Die Idee w?re also, dass alle Dateien in /home/admin/log
> > > (Unterverzeichnisse werden ignoriert), die ?lter als 30 Tage
> > > sind, nach /home/admin/log/old kopiert werden.
> > > Das script findet (endlich :-) die Dateien, doch find f?hrt das
> > > Kommando nicht aus, sondern sagt das:
> > > find: "/bin/mv /home/admin/log/backup_files.sh.bak
> > > /home/admin/log/old/ ;": Datei oder Verzeichnis nicht gefunden
> > > (Und so weiter f?r jede gefundene Datei).
> > >
> > > Wo liegt dieser Hund begraben?
> >
> > Erstmal wird "/bin/mv \{\} /home/admin/log/old/ \;" als ein
> > Argument an find uebergeben. find moechte aber einzelne Argumente
> > ageschlossen von einem ; haben. Hier ein kleines Testscript, mit
> > dem Du die Fehler finden solltest (ich weiss natuerlich nicht, wie
> > Du Deine config einliest...):
> >
> > -------------8<---------------------------------------------
> > #!/bin/bash
> > function showargs {
> >     I=1
> >     for ARG in "$@"; do printf "%02d %s\n" $[I++] "$ARG"; done
> > }
> >
> > read DIRECTORY PATTERN MAXDEPTH MTIME COMMAND <<EOF
> > /var/tmp    *    1    30    echo /bin/mv {} /home/admin/log/old/ ;
> > EOF
> > showargs find "${DIRECTORY}" -name "${PATTERN}" \
> >     -maxdepth "${MAXDEPTH}" -mtime +"${MTIME}" -exec ${COMMAND}
> > -------------8<------------------------------------------------
> >
> > So wie es da steht, geht es bei mir:
> >
> > ~> ./script.sh
> > 01 find
> > 02 /var/tmp
> > 03 -name
> > 04 *
> > 05 -maxdepth
> > 06 1
> > 07 -mtime
> > 08 +30
> > 09 -exec
> > 10 echo
> > 11 /bin/mv
> > 12 {}
> > 13 /home/admin/log/old/
> > 14 ;
> >
> > Wenn Du im config-File "/bin/mv \{\} /home/admin/log/old/ \;"
> > schreibst und bei find "${COMMAND}", kommt da heraus:
> >
> > ~> ./script.sh
> > 01 find
> > 02 /var/tmp
> > 03 -name
> > 04 *
> > 05 -maxdepth
> > 06 1
> > 07 -mtime
> > 08 +30
> > 09 -exec
> > 10 "/bin/mv {} /home/admin/log/old/ ;"
> >
> > find versucht also das Programm "/bin/mv {} /home/admin/log/old/ ;"
> > auszufuehren, welches es nicht gibt.
>
> Das Versucht find aber nur deswegen, weil "${COMMAND}" in Hochkomma
> steht. Laesst man die Hochkommas an dieser Stelle weg, wird es ganz
> normal ausgefuehrt (kann man mit obigem Programm schoen sehen).
>
> > Das Weglasssen der quotes im config-File beim Command ist
> > natuerlich nicht so toll, weil es damit in der letzten Spalte stehe
> > muss und man sich auf das Verhalten von read verlaesst, den Rest
> > der Zeile in die letzte Variable zu stecken. Aber wenn Du es
> > quotest und mit read liest, dann ueberleben die quotes. So richtig
> > stabil sieht das alles nicht aus ;)
>
> Die Hochkomma in der Konfig Datei haben null wirkung (zumindest wenn
> sie ueber read eingelesen werden. Sie werden dann als "normale"
> Zeichen eingelesen). Man kann sie auch weg lassen. Das kann man an
> der Ausgabe von untestehendem Script sehen.
>
> =========================================================
> #!/bin/bash
> function showargs {
>     I=1
>     for ARG in "$@"; do printf "%02d %s\n" $[I++] "$ARG"; done
> }
>
> read DIRECTORY PATTERN MAXDEPTH MTIME COMMAND BLA <<EOF
> /var/tmp    *    1    30    "echo /bin/mv {} /home/admin/log/old/ ;"
> Muell EOF
> echo "Inhalt von BLA $BLA"
> showargs find "${DIRECTORY}" -name "${PATTERN}" \
>     -maxdepth "${MAXDEPTH}" -mtime +"${MTIME}" -exec ${COMMAND}
> =========================================================
>
> Ihno
>
> _______________________________________________
> linux-l mailing list
> linux-l at mlists.in-berlin.de
> https://mlists.in-berlin.de/mailman/listinfo/linux-l


scoll - König


guck mir den text später an



:-)

- -- 
      Roland at Penzin.de	                        gpg --recv-key 55F54554
tel.  +49  [ 030 / 979 89 226 | 0179 / 77 59 553 ]       icq: 141928574
Key- Fingerabdruck = F1E7 B3D5 F762 3B29 EFEA  7569 9DC4 E786 55F5 4554
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux)

iD8DBQE/DlYrncTnhlX1RVQRAhqKAKCOynDN6Aa6rtNAmrqE7V+048qPLACfU3CC
ZmN9eY6DgLpo9UASx5ekMkM=
=HCDw
-----END PGP SIGNATURE-----





Mehr Informationen über die Mailingliste linux-l