ubuntuusers.de

[gelöst] Filetime per Shellscript ermitteln

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6500

Wohnort: Hamburg

Leider tue ich mich mit der Shellscript Programmierung etwas schwer und komme daher nicht so richtig weiter.
Ich habe auf einer Win Partition (FAT32) knapp 900 Textdateien, die Bestandteil einer Datenbank sind. Es handelt sich dabei um die Grundgerüste für HTML Dateien und ich habe diese bereits testweise mit find, grep und sed erfolgreich modifizieren können (ändern von HTML Tags).

Jetzt möchte ich aber noch jeder dieser Dateien eine Zeile mit einem Datumstempel hinzufügen (last modified..). Das Datum soll der Entstehungszeitpunkt dieser Datei sein, so wie er mit:
"ls -l" ausgegeben wird. Wie kann ich dieses Datum in eine Textvariable kriegen damit ich es weiterverarbeiten kann?

Dakuan

nudeldieb

Anmeldungsdatum:
3. Juli 2005

Beiträge: 936

Tach,

stat [-t] <Datei>

könnte da helfen. Man kann sich dann das entsprechende Datum herausgreppen.
Die option -t sorgt dafür, daß die Ausgabe in eine Zeile kommt ohne Überschriften.
Ich such grade noch selbst, in welchem Paket es steckt...
.edit
ist in coreutils
.edit

Gruß,
der Nudeldieb

Dakuan

(Themenstarter)
Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6500

Wohnort: Hamburg

Danke, das sieht schonmal sehr gut aus.
stat ist übrigens standardmäßig installiert, wie ich gerade gesehen habe. Der erste Versuch damit hat mich allerdings etwas geschockt. Man krigt die Bits ja nackt vor die Füße geworfen.
Aber nach dem Studium der man Pages habe ich gesehen, das es noch Formatoptionen gibt:

dakuan@blue:~/suse$ stat -t -c %y suse_fstab
2006-01-01 12:12:42.000000000 +0100
dakuan@blue:~/suse$

Woher kennst du den Befehl? Im Koffler habe ich ihn nicht gefunden.

Dakuan

nudeldieb

Anmeldungsdatum:
3. Juli 2005

Beiträge: 936

Tach,
ich brauchte das mal selbst.
⇒ O'Reillys Linuxreferenz.
In den Kofler guck ich fast gar nicht mehr rein; ist mir persönlich zu suselastig.

Gruß,
der Nudeldieb

Dakuan

(Themenstarter)
Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6500

Wohnort: Hamburg

Wie du oben sehen kannst ist mein Testrechner nicht susefrei 🤣
Der Koffler war damals mein erstes Linux Buch, und ausserdem wollte meine Nichte das T-Shirt, welches dabei war, als Nachthemd haben.

Dakuan

nudeldieb

Anmeldungsdatum:
3. Juli 2005

Beiträge: 936

Sehr gut. Der kommende Linuxnachwuchs... ☺

Dakuan

(Themenstarter)
Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6500

Wohnort: Hamburg

Das glaube ich eher nicht. Aber immerhin ist sie schon von alleine drauf gekommen, das man auch unter XP den Firefox benutzen kann.

Aber vielleicht könntest du mir nochmal einen Tip geben. Ich stehe schon wieder auf dem Schlauch. Ich schaffe es nicht das Datum an sed zu übergeben.
Das fragliche Codesegment sieht momentan so aus:

...
  # Datum nach $1 holen, erstes Feld der Ausgabe von stat
  set `stat -t -c %y $f | cut -d' ' -f1`
  #echo Letzte Veraenderung: $1
  sed -e '/^.::.text/i\.::.date\n$1' $f
...

Die Variable $f enthält den Filenamen (von find) und ".::.text" ist die Abschnittsmarke vor der das Datum eingefügt werden soll. Der Variablenname $1 wird dabei als Text übernommen anstatt derren Inhalt einzufügen.

Dakuan

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17620

Wohnort: Berlin

Ich weiß nicht recht was Du machst, aber vielleicht meinst Du:

sed -e '/^.::.text/i\.::.date\n'$1 $f


Datum, Uhrzeit und Dateinamen kann man übrigens auch mit awk und ls gut eruieren:

dateiinfo=$(ls -l | awk '{print $6 " " $7 " " $8}')

nudeldieb

Anmeldungsdatum:
3. Juli 2005

Beiträge: 936

Tach,
ich hab jetzt nur 'ne brutale Methode anzubieten, wobei ich annehme, daß es das ist, was Du meinst:

.edit

sed -e 's/^.::.text/.::.date\n'$1'\n.::.text/' $f


.edit

Da geht mglw. einfacher oder mit Perl 😉

Dakuan

(Themenstarter)
Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6500

Wohnort: Hamburg

Jo, danke. Die Lösung von user unknown funktioniert!
Was die Position eines Zeichens doch für Auswirkungen haben kann.

@nudeldieb
Mit dem Befehl "s" hatte ich auch angefangen. Als es nicht ging habe ich fast alle Varianten der man pages durchprobiert, bis überhaupt mal irgendwas ging. Die jetzige Version scheint mir die effektivste, weil hier nur diese eine Zeile gesucht wird (hoffe ich).

BTW, beim Studium der man pages für sed kamen mir ernsthafte Zweifel ob mein Verstand noch funktioniert, da andere ja anscheinend verstehen was dort geschrieben steht 🙄

Dakuan

nudeldieb

Anmeldungsdatum:
3. Juli 2005

Beiträge: 936

Tach,
funktioniert das \n in der Lösung von user unknown?
Bei mir wird kein newline ausgegeben, sondern einfach ein n; deshalb hatte ich nochmal den substitute-sed gepostet.

Es scheint wohl doch so zu sein, daß Bücher und/oder manpages bei solchen regex-Programmen wie sed, awk (bis ich da mal verstanden habe, wie der substitute-Befehl funktioniert 🙄 ) irgendwie nicht viel bringen.
Am besten funktionierte hier bei mir trial and error.

Gruß,
der Nudeldieb

Dakuan

(Themenstarter)
Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6500

Wohnort: Hamburg

Ja, es funktioniert. Das war auch einer der Gründe, warum ich letztenendes "i" als Lösungansatz genommen hatte. Das mit den Newlines steht auch so in der Doku.
Was dort nicht so recht draus hervorgeht ist, das zwischen dem "i" und dem ersten "\" kein Leerzeichen sein darf, wie ich es zuerst aus der Doku herausgelesen hatte. Diese Erkenntnis hat ein ganzes Bier gedauert.

Gibt es überhaupt jemanden, der Reguläre Ausdrücke ohne nachzuschlagen hinkriegt 😉

Dakuan

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17620

Wohnort: Berlin

Also ich bekomme die meisten regexps die ich brauche (das ist natürlich eine etwas vage Beschreibung) inzwischen hin, habe aber mit einem Buch (Herold, sed und awk) angefangen, nicht mit der manpage.

Antworten |