Gibt es eine Möglichkeit, das Datum zu ändern, an dem eine Datei geändert/erstellt wurde (das in Nautilus oder mit dem Befehl ls -l angezeigt wird)? Idealerweise suche ich nach einem Befehl, mit dem die Datums-/Zeitstempel einer ganzen Reihe von Dateien auf einen bestimmten Zeitpunkt früher oder später geändert werden können (z. B. +8 Stunden oder -4 Tage usw.).
Antwort1
Sofern Sie der Eigentümer der Datei (oder Root) sind, können Sie den Änderungszeitpunkt einer Datei mit dem folgenden touch
Befehl ändern:
touch filename
Standardmäßig wird die Änderungszeit der Datei auf die aktuelle Zeit gesetzt, es gibt jedoch eine Reihe von Flags, z. B. das -d
Flag zum Auswählen eines bestimmten Datums. Um beispielsweise eine Datei so festzulegen, dass sie zwei Stunden vor der Gegenwart geändert wurde, können Sie Folgendes verwenden:
touch -d "2 hours ago" filename
Wenn Sie die Datei stattdessen relativ zu ihrem bestehenden Änderungszeitpunkt ändern möchten, sollte Folgendes funktionieren:
touch -d "$(date -R -r filename) - 2 hours" filename
Wenn Sie eine große Anzahl von Dateien ändern möchten, können Sie Folgendes verwenden:
find DIRECTORY -print | while read filename; do
# do whatever you want with the file
touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done
Sie können die Argumente ändern, um find
nur die Dateien auszuwählen, die Sie interessieren. Wenn Sie nur die Dateiänderungszeiten relativ zur aktuellen Zeit aktualisieren möchten, können Sie dies folgendermaßen vereinfachen:
find DIRECTORY -exec touch -d "2 hours ago" {} +
Diese Form ist mit der dateizeitrelativen Version nicht möglich, da sie zur Bildung der Argumente die Shell verwendet touch
.
Was die Erstellungszeit betrifft, so speichern die meisten Linux-Dateisysteme diesen Wert nicht. Es ist ein ctime
mit Dateien verknüpft, aber es speichert, wann die Dateimetadaten zuletzt geändert wurden. Wenn die Berechtigungen der Datei nie geändert werden, kann es sein, dass sie die Erstellungszeit speichert, aber das ist Zufall. Das explizite Ändern der Dateiänderungszeit zählt als Metadatenänderung und hat daher auch den Nebeneffekt, dass das aktualisiert wird ctime
.
Antwort2
Der einfachste Weg – Zugriff und Änderungen erfolgen auf die gleiche Weise:
touch -a -m -t 201512180130.09 fileName.ext
Wo:
-a = accessed
-m = modified
-t = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format
Wenn Sie es verwenden möchten, NOW
lassen Sie einfach den -t
und den Zeitstempel weg.
So überprüfen Sie, ob sie alle gleich sind:
stat fileName.ext
Sehen:Mann berühren
Antwort3
Danke für die Hilfe. Das hat bei mir funktioniert:
Gehen Sie im Terminal in das Verzeichnis für die Datumsbearbeitung. Geben Sie dann Folgendes ein:
find -print | while read filename; do
# do whatever you want with the file
touch -t 201203101513 "$filename"
done
Nach dem Drücken der Eingabetaste wird ein ">" angezeigt, außer beim letzten Mal -> „Fertig“.
Hinweis: Möglicherweise möchten Sie „201203101513“ ändern.
„201203101513“ = ist das gewünschte Datum für alle Dateien in diesem Verzeichnis.
Antwort4
Dieses kleine Skript funktioniert zumindest bei mir:
#!/bin/bash
# find specific files
files=$(find . -type f -name '*.JPG')
# use newline as file separator (handle spaces in filenames)
IFS=$'\n'
for f in ${files}
do
# read file modification date using stat as seconds
# adjust date backwards (1 month) using date and print in correct format
# change file time using touch
touch -t $(date -v -1m -r $(stat -f %m "${f}") +%Y%m%d%H%M.%S) "${f}"
done