[linux-l] Probleme mit Cleanupscript

Schlomo Schapiro belug at schlomo.schapiro.org
Mi Jul 9 16:39:50 CEST 2003


Hello Jens,

veruch doch, das mit xargs zu lösen. Ansonsten kannste wirklich nur darauf
vertrauen, das read den Rest der Zeile in eine Variable packt.

Schlomo

Tuesday, July 8, 2003, 4:16:32 PM, you 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 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 ;)

> Gruss,

> Jens.
> _______________________________________________
> linux-l mailing list
> linux-l at mlists.in-berlin.de
> https://mlists.in-berlin.de/mailman/listinfo/linux-l


-- 
Best regards,
 Schlomo





Mehr Informationen über die Mailingliste linux-l