Ich möchte Quell- und Zieldatei vergleichen. Wenn die Quelldatei neuer ist, als die Zieldatei, soll ein Befehl ausgeführt werden. Wie bekommt man die Zeit einer Datei? Wie vergleicht man zwei Zeiten?
Direkt die Modification-timestamps vergleichen geht mit "-nt" ("newer than") also
1 | if [ file1 -nt file2 ]; then |
2 | echo blubb |
3 | fi |
Auslesen der Daten zum weiterverrechnen in der shell geht z.B. mit "stat".
1 | TIMESTAMP=`stat -c %X testfile` |
"man stat" für Details.
Emil schrieb: > Ich möchte Quell- und Zieldatei vergleichen. Wenn die Quelldatei neuer > ist, als die Zieldatei, soll ein Befehl ausgeführt werden. > Wie bekommt man die Zeit einer Datei? ls -al FILENAME| awk '{print $6" " $7}' > Wie vergleicht man zwei Zeiten? Datum jeweils in Unixtime umrechnen und subtrahieren: date +%s -d "`ls FILENAME | awk '{print $6" " $7}'`"
olibert schrieb:
> Manpage: man test
Oder so, ja :-)
Als Shellscript speichern und beim Aufruf die beiden Dateinamen
uebergeben:
#!/bin/bash
if [ $1 -nt $2 ];
then
Befehl
fi
Olli R. schrieb: >> Wie bekommt man die Zeit einer Datei? > > ls -al FILENAME| awk '{print $6" " $7}' > >> Wie vergleicht man zwei Zeiten? > > Datum jeweils in Unixtime umrechnen und subtrahieren: > > date +%s -d "`ls FILENAME | awk '{print $6" " $7}'`" Wie immer unter Unix: Viele Wege führen zum Ziel. Dein Weg hängt aber vom Ausgabeformat von ls ab. Für ein lokales Skript in Ordnung, nur portabel isses halt nicht wirklich.
Ernst B✶ schrieb:
> Wie immer unter Unix: Viele Wege führen zum Ziel.
Ja. Mir war nur gerade entfallen, dass es dafuer ja einen test gibt :-)
Also, hier nochmal die Loesung als fertiges Script: #!/bin/bash if [ $1 -nt $2 ]; then Befehl fi
Hey, toll & Danke! Werde mal systematisch was zum Shell-Scripting lesen. Wenn man nicht immer nachschlagen muss, kann das wohl sehr produktiv sein.
Emil schrieb: > Hey, toll & Danke! > Werde mal systematisch was zum Shell-Scripting lesen. > Wenn man nicht immer nachschlagen muss, kann das wohl sehr produktiv > sein. http://tldp.org/LDP/abs/html/
mit bash geht es auch so: if [[ quelle -nt ziel || ! -f ziel ]] then "create ziel from quelle" else echo "nothing to do" fi evtl. kann man die bedingungen noch tauschen, spart dann vielleicht etwas rechenzeit. allerdings kostet mich das nachschlagen ein milliardenfaches..
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.