Forum: PC-Programmierung Shell: Alter von Quell- und Zieldatei vergleichen


von Emil (Gast)


Lesenswert?

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?

von Εrnst B. (ernst)


Lesenswert?

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.

von olibert (Gast)


Lesenswert?

Manpage: man test

von Olli R. (omr) Benutzerseite


Lesenswert?

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}'`"

von Olli R. (omr) Benutzerseite


Lesenswert?

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

von Εrnst B. (ernst)


Lesenswert?

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.

von Olli R. (omr) Benutzerseite


Lesenswert?

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 :-)

von Olli R. (omr) Benutzerseite


Lesenswert?

Also, hier nochmal die Loesung als fertiges Script:

#!/bin/bash
if [ $1 -nt $2 ];
then
    Befehl
fi

von Emil (Gast)


Lesenswert?

Hey, toll & Danke!
Werde mal systematisch was zum Shell-Scripting lesen.
Wenn man nicht immer nachschlagen muss, kann das wohl sehr produktiv 
sein.

von Olli R. (omr) Benutzerseite


Lesenswert?

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/

von Emil (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.