www.mikrocontroller.net

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


Autor: Emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Direkt die Modification-timestamps vergleichen geht mit "-nt" ("newer 
than")
also
if [ file1 -nt file2 ]; then
   echo blubb
fi

Auslesen der Daten zum weiterverrechnen in der shell geht z.B. mit 
"stat".
TIMESTAMP=`stat -c %X testfile`

"man stat" für Details.

Autor: olibert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manpage: man test

Autor: Olli R. (omr) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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}'`"

Autor: Olli R. (omr) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Olli R. (omr) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Olli R. (omr) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, hier nochmal die Loesung als fertiges Script:

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

Autor: Emil (Gast)
Datum:

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

Autor: Olli R. (omr) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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/

Autor: Emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.