Erstelldatum/Zeit einer Datei erfassen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
mcmehl
Beiträge: 276
Registriert: 16.06.2004 16:53:15
Kontaktdaten:

Erstelldatum/Zeit einer Datei erfassen

Beitrag von mcmehl » 24.09.2004 13:20:29

Hallo

mein Problem ist: Ich möchte das Änderungsdatum einer Datei erfassen. Datum und Zeit sollen dann in eine MySQL Datenbank eingetragen werden, dazu brauche ich aber ein bestimmtest Format.

Code: Alles auswählen

ls -l

-rw-r--r--  1 super user  32500 Sep 23 17:48 Datei
selbst wenn ich jetzt Datum und Zeit mit SED die Informationen einzeln ausschneide ist da immernoch der Monat!

Darum meine Frage, kennt Ihr ein Programm welches bereits ein so "schönes" Datumsformat für Dateien ähnlich wie "date" erzeugt. Oder kennt jemand eine andere Lösung?

Vielen Dank im voraus

fluid
Beiträge: 494
Registriert: 14.11.2003 21:52:49

Beitrag von fluid » 24.09.2004 14:06:18

man ls hat geschrieben: --full-time
like -l --time-style=full-iso

[...]

--time-style=STYLE
show times using style STYLE: full-iso, long-iso, iso, locale, +FORMAT

FORMAT is interpreted like `date'; if FORMAT is FORMAT1<newline>FORMAT2, FORMAT1
applies to non-recent files and FORMAT2 to recent files; if STYLE is prefixed with
`posix-', STYLE takes effect only outside the POSIX locale

Benutzeravatar
QT
Beiträge: 1322
Registriert: 22.07.2004 21:08:02
Wohnort: localhost

Beitrag von QT » 24.09.2004 14:11:18

Eine Alternative waere auch, in dem Script die Variable LC_TIME auf zB de_DE@euro zu setzen, dann zeigt "ls" die Datumsangabe in der Form YYYY-MM-DD. Also ungefaehr so:

Code: Alles auswählen

export LC_TIME=de_DE@euro
ls -l $FILE

Benutzeravatar
labor78
Beiträge: 163
Registriert: 13.07.2004 10:29:58

Beitrag von labor78 » 24.09.2004 14:12:03

Ich würde vielleicht eher `awk' verwenden. Schau Dir außerdem mal das MANUAL genauer an. Auszug aus `man ls':
--time=WORD
show time as WORD instead of modification time:
atime, access, use, ctime or status; use specified
time as sort key if --sort=time

--time-style=STYLE
show times using style STYLE: full-iso, long-iso,
iso, locale, +FORMAT

FORMAT is interpreted like `date'; if FORMAT is
FORMAT1<newline>FORMAT2, FORMAT1 applies to non-
recent files and FORMAT2 to recent files; if STYLE
is prefixed with `posix-', STYLE takes effect only
outside the POSIX locale
May the source be with you...

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 24.09.2004 15:52:22

Code: Alles auswählen

stat Dateiname
BTW: Wenn du Veränderungen an einer Datei (z.B. durch Cracker) erkennen willst, sind SHA1-Prüfsummen die bessere Wahl.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 25.09.2004 14:18:38

Hi,

ich haette eine Perl Funktion im Angebot, die "Epoch" Zeiten in ein fuer MySQL vertraegliches Format konvertiert, klappt prima, ist aber nicht von mir, sondern aus einem Artikel aus der freeX. Man waere das klasse wenn mir so was selber einfallen wuerde ;-}

Code: Alles auswählen

# konvertiert epoch in mysql Zeitformat
sub epoch2mysql {
  # do time conversion
  # 2003-08-14 15:47:07
  local( $time ) = @_;
  my $tm = localtime($time);
  my $result = sprintf( "%4d-%2d-%2d_%2d:%2d:%2d",
    $tm->year+1900, $tm->mon+1, $tm->mday, $tm->hour, $tm->min, $tm->sec );
  $result =~ s/ /0/g;
  $result =~ s/_/ /g;

  $result;
}
Der Aufruf geht wie folgt:

Code: Alles auswählen

 my $a_time=epoch2mysql($atime);
Die Uebergebene Zeit ($atime) wird uebrigens auch per stat ermittelt.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Antworten