erik72
Goto Top

Mtime einer Datei in Variable

Hallo,
ich möchte in einer unix-sh einen Dateinamen in einen Dateinamen.Erstellungsdatum(mtime) umbenennen.
Frage: Wie könnte ich das Erstellungsdatum einer Datei in eine Variable packen? Diese könnte ich dann auslesen und im mv-Befehl einfügen.
Danke für Eure Lösungsansätze...schöne Grüße
Erik

Content-ID: 235467

Url: https://administrator.de/contentid/235467

Ausgedruckt am: 25.11.2024 um 10:11 Uhr

colinardo
colinardo 14.04.2014 aktualisiert um 12:18:44 Uhr
Goto Top
Hi Erik,
Frage: Wie könnte ich das Erstellungsdatum einer Datei in eine Variable packen?
z.B. so
file="deineDatei.txt"  
filename=${file%.*}
extension=${file##*.}
datum=$(date -r "$file" +%F_%T)  
mv "$file" "$filename.$datum.$extension"  
Grüße Uwe
Erik72
Erik72 14.04.2014 um 13:30:12 Uhr
Goto Top
Hallo Uwe,
lieben Dank für Deine Mühe. Meine sh kennt die option -r bei date leider nicht.

date: illegal option -- r
Usage: date [-u] [+format]
date [-u] [mmddhhmm[[cc]yy]]
date [-a [-]sss.fff]


Hätte noch jemand eine Idee, das Erstellungsdatum in eine Variable zu packen?

Grüße
Erik
colinardo
colinardo 14.04.2014 aktualisiert um 13:37:26 Uhr
Goto Top
dann probiers halt mal damit
datum=$(stat -c %y test.txt | cut -d '.' -f1)
Erik72
Erik72 14.04.2014 um 13:41:50 Uhr
Goto Top
hmmmm, er will nicht....

$ ./move_in_mtime
./move_in_mtime[6]: stat: not found
colinardo
colinardo 14.04.2014 aktualisiert um 13:57:17 Uhr
Goto Top
auf was für einem System arbeitest du denn überhaupt ? scheint doch ziemlich abgespeckt zu sein....

dann habe ich hier noch was für dich:
find /pfad/zur/datei -name deineDatei.txt -printf '%TY-%Tm-%Td_%TX'
Erik72
Erik72 14.04.2014 um 14:10:52 Uhr
Goto Top
Das ist ein HP-UX B.11.31 und das Skript muss unter ksh laufen

Schade, deine letzte Idee will auch nicht.....

find: bad option -printf
colinardo
colinardo 14.04.2014 aktualisiert um 14:28:30 Uhr
Goto Top
Die Systeme kenne ich nicht, dann versuch es über die Ausgabe von ls. Jetzt haben wir langsam alles durch...
 ls -l deineDatei.txt | awk '{print $6"_"$7}'
Erik72
Erik72 14.04.2014 um 15:29:20 Uhr
Goto Top
Funktioniert! Danke! Es gibt nur ein kleines Problemchen. Dateien älter als ein Jahr werden mittels ls -l ohne Uhrzeit gelistet und somit beim move überschrieben.

430 Mar 16 2007 /pfad1/testfile
763 Mar 16 2007 /pfad2/testfile
834 Mar 16 2007 /pfad3/testfile

sobald ich diese files in /ziel/testfile.zeitstempel verschiebe, ist nur die letzte datei vorhanden, da Zeitstempel gleich.


bei files aus diesem jahr funktioniert es gut:

270 Apr 14 14:59 /pfad1/testfile
233 Apr 14 15:04 /pfad1/testfile
210 Apr 14 15:15 /pfad1/testfile
colinardo
colinardo 14.04.2014 aktualisiert um 16:29:08 Uhr
Goto Top
OK in dem Fall nehme mal das:
ls -l --time-style='+%Y-%m-%d_%H:%M:%S' deineDatei.txt | awk '{print $6}'
hoffentlich kennt deine Kiste diesen Parameter wenigstens ...sonst nehm ne 9mm und blas ihn in die ewigen Jagdgründe face-wink