schneibva
Anmeldungsdatum: 25. Dezember 2006
Beiträge: 508
Wohnort: Franken
|
Ich habe etliche Dateien (>100), bei denen der Zeitpunkt der Entstehung falsch ist, dieser Zeitpunkt ist für die Auswertung wichtig. Der Rechner lief mit der local time, er sollte aber mit UTC laufen, d.h. ich muss bei allen Dateien die Zeitangabe der Entstehung um eine Stunde zurückstellen. Klar, dazu gibt es touch. Aber >100 Dateien per Hand modifizieren? Kann man das irgendwie automatisieren?
|
Vej
Moderator, Supporter
Anmeldungsdatum: 7. März 2013
Beiträge: 3400
|
Hallo schneibva, du solltest dir mal find anschauen. Insbesondere die Schalter -amin und -execdir. Meine (noch unausgegorene) Idee dahinter:
Ich denke mit dem ersten Schalter solltest du alle Dateien finden können, die seit dem Hochfahren benutzt wurden und mit dem zweiten Schalter kannst du dann automatisch touch mit den modifizierten Werten ausführen. Das nur so als Anregung. Viele Grüße Vej
|
diesch
Anmeldungsdatum: 18. Februar 2009
Beiträge: 5072
Wohnort: Brandenburg an der Havel
|
touch kann das Entstehungsdatum nicht ändern, nur das Zugriffs- (atime ) und das Änderungsdatum (mtime ).
Die meisten Dateisysteme unter Linux speichern das Entstehungsdatum nicht, standardisiert ist zusätzlich zu den beiden obigen nur noch das Inode-Änderungsdatum (ctime ), d.h. das Datum der letzten Änderung von Dateirechten o.ä.
|
Mooi
Anmeldungsdatum: 15. August 2014
Beiträge: 187
|
Kann so aussehen:
#!/bin/bash
while read -rd '' line; do
mtime=${line%% *}
file="${line#* }"
newtime=$(($mtime-3600))
touch -d @$newtime "$file"
done < <(find -name "*" -type f -exec stat --printf "%Y %n\0" {} +) Das find solltest Du Dir anpassen (dazu das -name "*", das hier überflüssig ist, aber nicht falsch).
|
schneibva
(Themenstarter)
Anmeldungsdatum: 25. Dezember 2006
Beiträge: 508
Wohnort: Franken
|
diesch schrieb: touch kann das Entstehungsdatum nicht ändern, nur das Zugriffs- (atime ) und das Änderungsdatum (mtime ).
Ich vergass zu erwähnen, dass der Datenträger mit FAT32 formatiert ist. Es sollen alle dateien im Verzeichnis geändert werden
|
schneibva
(Themenstarter)
Anmeldungsdatum: 25. Dezember 2006
Beiträge: 508
Wohnort: Franken
|
Ich habe das Script von Mooi (vielen Dank) mal laufen lassen, Fehler bash: ./new.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden Ich habe dann mal die "" in der Zeile file="${line#* }" weg gemacht, gleicher Fehler.
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
schneibva schrieb: Ich habe das Script von Mooi (vielen Dank) mal laufen lassen, Fehler bash: ./new.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
Wo kommt denn das "^M" her?
|
Vej
Moderator, Supporter
Anmeldungsdatum: 7. März 2013
Beiträge: 3400
|
snafu1 schrieb: schneibva schrieb: Ich habe das Script von Mooi (vielen Dank) mal laufen lassen, Fehler bash: ./new.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
Wo kommt denn das "^M" her?
Meiner Erfahrung nach ist das meistens ein Windows-Zeilenumbruch in der Shell. Fragt mich jetzt aber bitte nicht, warum der als ^M dargestellt wird. Zum Problem:
schneibva schrieb: bash: ./new.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
Da würde ich jetzt vermuten, das der Bash-Interpreter nicht in /bin/bash installiert ist.
Kannst du mal versuchen die Ausgabe von zu posten? Vielen Dank Vej
|
g00d.morning
Anmeldungsdatum: 20. Februar 2013
Beiträge: 330
|
Vej schrieb: snafu1 schrieb: schneibva schrieb: Ich habe das Script von Mooi (vielen Dank) mal laufen lassen, Fehler bash: ./new.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
Wo kommt denn das "^M" her?
Meiner Erfahrung nach ist das meistens ein Windows-Zeilenumbruch in der Shell. Fragt mich jetzt aber bitte nicht, warum der als ^M dargestellt wird.
Siehe: Zeilenumbruch
Zum Problem:
schneibva schrieb: bash: ./new.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
Da würde ich jetzt vermuten, das der Bash-Interpreter nicht in /bin/bash installiert ist.
Kannst du mal versuchen die Ausgabe von zu posten?
Mach es nicht unnötig kompliziert. Auch Dein System wird unter /bin/bash^M nichts finden 😉
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
Ist das Bash-Skript etwa auf der Windows-Partition abgespeichert worden? 😮
|
schneibva
(Themenstarter)
Anmeldungsdatum: 25. Dezember 2006
Beiträge: 508
Wohnort: Franken
|
/bin/bash ist vorhanden Das Skript ist auf der Platte, die mit FAT32 formatiert worden ist. Das ^M soll vermutlich das CR (&h0D) darstellen (ist der 13. Buchstabe im (Alphabet). Hilft mir bloss alles nichts, auch wenn im Skript kein CR (&h0D) drin ist, geht es nicht.
bash: ./new.sh: Datei oder Verzeichnis nicht gefunden
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
schneibva schrieb: Hilft mir bloss alles nichts, auch wenn im Skript kein CR (&h0D) drin ist, geht es nicht.
bash: ./new.sh: Datei oder Verzeichnis nicht gefunden
Diese Fehlermeldung zeigt jetzt aber an, dass das Skript an sich nicht gefunden wird. Demzufolge rufst du das Skript offenbar von einem Ort auf, an dem new.sh halt nicht im selben Verzeichnis abgelegt wurde.
|
schneibva
(Themenstarter)
Anmeldungsdatum: 25. Dezember 2006
Beiträge: 508
Wohnort: Franken
|
|
Mooi
Anmeldungsdatum: 15. August 2014
Beiträge: 187
|
Man kann auch einen (schwer lesbaren) Einzeiler draus machen und ihn einfach ins Terminal kopieren:
while read -rd '';do touch -d @$((${REPLY%% *}-3600)) "${REPLY#* }";done< <(find -name "*" -type f -exec stat --printf "%Y %n\0" {} +)
Dann muss man aber vorher sicherstellen, dass eine Bash läuft (ist meistens der Fall).
|