Wie kann ich das Änderungs-/Erstellungsdatum einer Datei ändern?

Wie kann ich das Änderungs-/Erstellungsdatum einer Datei ändern?

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 touchBefehl ä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 -dFlag 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 findnur 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 ctimemit 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, NOWlassen Sie einfach den -tund 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

verwandte Informationen