Erstellungsdatum einer Datei ändern

62

Können Sie mir bitte mitteilen, wie ich das Erstellungsdatum einer Datei in Lion ändern kann? Mir ist klar, dass es den Befehl touch-t gibt, aber das funktioniert in Lion nicht. Ein paar Leute haben einen anderen Weg erwähnt, aber ich denke, sie haben die Lösung in einer "Kodierer" -Sprache geschrieben, anstatt in einer Laiensprache. Wäre jemand in der Lage, sie so zu beantworten, wie es ein Laie ausführen kann?

Vielen Dank für deine Hilfe.

user55502
quelle
Die "Kodierer" -Erklärung, über die andere Leute geschrieben haben, ist wahrscheinlich ein Hinweis auf "Berührung". Sie müssten ein Terminal öffnen und zu dem Ordner navigieren, in dem sich die Datei befindet. Verwenden Sie dann den Befehl touch, um das Erstellungsdatum der Datei zu ändern.
Derek Knight
2
FWIW Mit "touch-t" sind Sie auf der richtigen Linie, aber zwischen h und - befindet sich ein Leerzeichen. Es ist "touch-t"
Derek Knight

Antworten:

95

touch -tNormalerweise werden nur die Änderungs- und Zugriffszeiten geändert. Die Erstellungszeit wird nur geändert, wenn die Zielzeit vor der ursprünglichen Erstellungszeit liegt.

touch -t 199912312359 file.txt
touch -t $(date -jf %FT%T 1999-12-31T23:59:59 +%Y%m%d%H%M%S) file.txt

SetFile -d Ändert immer die Erstellungszeit.

SetFile -d '12/31/1999 23:59:59' file.txt
SetFile -d "$(GetFileInfo -m test.txt)" file.txt

SetFile ist Teil des Befehlszeilen-Tools-Pakets, das unter developer.apple.com/downloads oder in den Xcode- Einstellungen heruntergeladen werden kann .

Lri
quelle
4
-m zum Ändern der Änderungszeit.
AlikElzin-kilaka
5
In Yosemite musste ich das Format +%Y%m%d%H%M.%S(zwischen Minuten und Sekunden) verwenden
Calimo
Ich schrieb eine Funktion namens CpCreationDatein fish:SetFile -d (GetFileInfo -m $argv[1]) $argv[2]
Pascal
15

In Mac OS X scheint es vier verschiedene Zeitstempel zu geben, die einer Datei zugeordnet sind. Diese Zeitstempel sind nicht immer unabhängig voneinander aktualisiert, aber man kann einige individuelle Steuerung mit einem wenig Sorgfalt hat und mit der Verwendung von touch, SetFileund chown(oder chmod). Um dies zu sehen, experimentieren wir und erstellen eine neue Datei an der Eingabeaufforderung #:

# touch a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

Das erste Datum ist die letzte Zugriffszeit ( atime), das zweite die letzte Änderungszeit ( mtime), das dritte die letzte Statusänderung ( ctime) und das vierte die Zeit der Dateierstellung (Geburt, Btime) man lstat.

So ändern Sie die Zugriffszeit ( atime) auf eine bestimmte Zeit:

# touch -a -t201412312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "May 19 00:11:14 2015" "May 19 00:11:46 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

So ändern Sie die Änderungszeit ( mtime) und die Zeit der Dateierstellung ( Btime) auf eine bestimmte Zeit:

# touch -m -t201312312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 2013" 4096 0 0 a.txt

Anscheinend aktualisiert dies auch automatisch die Zeit der letzten Statusänderung ( ctime) auf die aktuelle Systemzeit!

Um nur den Zeitpunkt der Erstellung / Geburt ( Btime) auf einen bestimmten Zeitpunkt zu ändern , verwenden Sie (wie oben von anderen vorgeschlagen):

# SetFile -d "12/31/1999 23:59:59" a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

Um nur den Zeitpunkt der letzten Statusänderung ( ctime) auf die aktuelle Systemzeit zu ändern, verwenden Sie zum Beispiel:

# chown username a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:13:45 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

wo usernameist der Besitzer der Datei (wie von statoder gemeldet ls -l). Dies ändert nicht den Besitz der Datei, greift jedoch auf den Inode der Datei zu und zeichnet diesen als Zeitpunkt der letzten Statusänderung auf. Leider ist es nicht möglich, die Uhrzeit hier explizit anzugeben, außer durch Ändern der Uhrzeit des Computers ...

Zusammenfassend kann man (in dieser Reihenfolge für die letzten 3) Folgendes verwenden, um die vier Zeitstempel unabhängig voneinander ändern zu können:

  1. touch -a -tCCYYMMDDHH.SS <file>
  2. touch -m -tCCYYMMDDHH.SS <file>
  3. SetFile -d "MM/DD/CCYY HH:MM:SS" <file>
  4. [Systemdatum einstellen] chown username <file>[zum normalen Systemdatum zurückkehren]

(Natürlich ist das Zurücksetzen des Systemdatums möglicherweise kein risikofreier Vorgang, wie Sie gewarnt wurden.)

armando.sano
quelle
+1 Danke für diese super ausführliche Antwort. Dies löste alle meine Leiden.
Govind Rai
13

Der Befehlszeilenbefehl touchfunktioniert in Lion, Sie benötigen jedoch einige Hintergrundinformationen zur Verwendung.

Erstens müssen Sie es eingeben, es ist kein Dienstprogramm, das grafisch in einem Fenster ausgeführt wird. Der Ort, an dem Sie es eingeben, ist eine App namens Terminal . Sie finden dies in Ihrem Ordner "Dienstprogramme" oder verwenden Sie die Spotlight-Suche, um es zu finden.

Sobald Sie es starten, erhalten Sie ein Befehlszeilenfenster, in dem Sie Befehle eingeben können. Nur weil Sie tippen, heißt das nicht, dass es etwas mit Codierung zu tun hat, aber für jemanden, der mit "altmodischen" Betriebssystembefehlen neu ist, kann es ein wenig einschüchternd aussehen.

Der Befehl heißt also touch , und nach dem Befehl können Sie verschiedene Parameter übergeben. Der einzige erforderliche Parameter ist der Dateiname. Wenn Sie Folgendes eingeben, wird das Datum der letzten Änderung der Datei auf die aktuelle Uhrzeit gesetzt:

touch filename

Natürlich müssen Sie möglicherweise zuerst die Datei suchen, wofür möglicherweise weitere Befehle erforderlich sind. die cd oder Change Directory - Befehl hilft hier:

cd ~/Desktop/files/PDFs
touch filename

Sie können auch einfach den vollständigen Pfad zur Datei als Teil des Befehls hinzufügen:

touch ~/Desktop/files/PDFs/filename

Durch eine erweiterte Verwendung des Touch-Befehls können Sie die Zeit festlegen, die Sie festlegen möchten, anstatt die Ausführungszeit zu verwenden. Sie können den Zugriff anstelle von Änderungszeiten festlegen. Dies ist das, was Parameter wie -t und andere tun. Einige stellen die Zeit auf die Zeit einer anderen Datei ein, andere auf die Zeit vorwärts oder rückwärts um den X-Betrag ( siehe hier für weitere Details), zB:

touch -d '1 May 2005 10:22' file8

Das Folgende ist von dieser Seite, die auch eine nützliche Referenz ist, und ein großartiges Beispiel mit einigen Tipps für diejenigen, die mit Dateispeicherorten in der Befehlszeile nicht vertraut sind

Beachten Sie, dass dies sowohl das Änderungsdatum als auch das Erstellungsdatum nur dann ändert, wenn Ihre Datei nach dem von Ihnen eingegebenen Datum erstellt wurde. Dies liegt daran, dass eine Datei nicht geändert werden kann, bevor sie erstellt wurde. Wenn es vor dem von Ihnen festgelegten Datum erstellt wurde, wird nur das Änderungsdatum geändert.

Wie ändere ich das Erstellungsdatum einer Datei?

  1. Öffnen Sie die Terminal-Anwendung ( /Applications/Utilities/Terminal.app) oder verwenden Sie iTerm.

  2. Geben Sie dies in das Terminal ein (ohne die Eingabetaste zu drücken) und geben Sie das Datum in folgendem Format ein YYYYMMDDhhmm:

    touch -t 201212211111
    
  3. Öffnen Sie ein Finder-Fenster und suchen Sie die Datei, die Sie ändern möchten, und ziehen Sie sie in das Terminal-Fenster. Anschließend wird der Dateispeicherort mit der Befehlszeilenterminologie eingefügt. Hier ist ein Beispiel dafür, was an dieser Stelle in das Terminal eingegeben werden sollte:

    touch -t 201212211111 /Volumes/Mac\ HD/Pictures/somefile.jpg
    

    201212211111 im obigen Beispiel stehen für „21. Dezember 2012, 11:11 Uhr

stuffe
quelle
2
Aber touchändert das Änderungsdatum nicht das Erstellungsdatum der Datei.
Daniel
1
Es kann beides. Kommt auf die Parameter an.
stuffe
2
Durch touchdie Verwendung der oben angegebenen Parameter wurden die Änderungen, jedoch nicht die Erstellungsdaten für meine Testdatei geändert.
Daniel
2
@ Daniel Sie haben wahrscheinlich Ihre Antwort erhalten, aber der Vollständigkeit halber touch wird das Erstellungsdatum in Abhängigkeit von den Argumenten geändert . Wenn Sie ein Änderungsdatum eingeben, das vor dem Erstellungsdatum der Datei liegt, wird das Erstellungsdatum automatisch auf den neuen Wert für das Änderungsdatum geändert, da eine Datei vor dem Erstellen nicht geändert werden kann.
Govind Rai
2
Ich habe gerade versucht, dies auf Sierra und Touch ändert definitiv nicht das creationDatum. Ich konnte Datum accessund modifiedDatum auf ein "Datum in der Vergangenheit" ändern, aber das Erstellungsdatum wurde nicht geändert . Überprüfen Sie die Manpage auf Berührungen. Das Erstellungsdatum wird nicht erwähnt. Dateisystem: Mac OS Extended (Journaled, Encrypted). Die Benutzung SetFile -d "$(GetFileInfo -m test.txt)" file.txthat einwandfrei funktioniert.
Jonathan Cross
7

Hier gibt es tolle Tipps, insbesondere den letzten (von Lauri Ranta, antwortete am 21. August um 15:21 Uhr). Perfekt!

Ich verwende jetzt einen einfachen Automator-Workflow, um mehrere Dateien im Batch zu ändern:

  1. Ausgewählte Finder-Objekte abrufen
  2. Führen Sie das Shell-Skript "Eingabe übergeben: als Argumente" aus.

Das Shell-Skript lautet:

for f in "$@"
do
    SetFile -d "$(GetFileInfo -m "$f")" "$f" 
done

Das wirkt wie ein Zauber.

Claudio Wilmanns
quelle
0

Der einfachste Weg, den ich gefunden habe, war, einen neuen Ordner zu erstellen, alle Unterordner des ausgegrauten Ordners in den neuen Ordner zu kopieren und voila, der neue Ordner ist nicht ausgegraut. Sie können dies sogar im Finder tun.

Was wäre cool
quelle