Können Zeitstempel beim Kopieren von Dateien unter OS X beibehalten werden?


14

Ich möchte die Dateien von drei Macs kombinieren, indem ich sie auf einer externen Festplatte in eine einzelne Ordnerhierarchie meines Designs kopiere.

In der Vergangenheit habe ich beim Kopieren von Dateien in OSX manchmal die Zeitstempel Erstellt und Geändert verloren. dh sie werden auf den gegenwärtigen Zeitpunkt geändert, an dem die Dateikopie stattfindet.

Wie kann ich sicherstellen, dass dies nicht passiert?


Wann verlieren Sie Zeitstempel?
lhf

Kopieren Sie sie wie?
Gerry

Antworten:


11

Ich bin nur selbst darauf gestoßen, und der eingebaute cpBefehl handhabt es tatsächlich.

Ich habe ein paar alte CF-Karten entdeckt, auf denen ich die Bilder sammeln wollte. Meine Verarbeitungsskripte sehen sich die Datei mtime an, um sie an der richtigen Stelle abzulegen, so dass ich sie aufbewahren musste.

Von der Manpage :

 -p    Cause cp to preserve the following attributes of each source file in the copy: modification time,
       access time, file flags, file mode, user ID, and group ID, as allowed by permissions.  Access
       Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also be pre-
       served.

       If the user ID and group ID cannot be preserved, no error message is displayed and the exit value
       is not altered.

       If the source file has its set-user-ID bit on and the user ID cannot be preserved, the set-user-
       ID bit is not preserved in the copy's permissions.  If the source file has its set-group-ID bit
       on and the group ID cannot be preserved, the set-group-ID bit is not preserved in the copy's per-
       missions.  If the source file has both its set-user-ID and set-group-ID bits on, and either the
       user ID or group ID cannot be preserved, neither the set-user-ID nor set-group-ID bits are pre-
       served in the copy's permissions.

Also konnte zshich mit ( NO NAMEals Name meines Kartenvolumes) Folgendes ausführen :

cp -rvp /Volumes/NO\ NAME/DCIM/**/*.{JPG,jpg} ~/Desktop/tmp/pics

Ich glaube, dass das spezielle /**/*Konstrukt spezifisch für ZSH ist; aber du könntest sowas machen

find /Volumes/WHATEVER -type d -print0 | xargs cp -vp {}/*.JPG /my/out/path

+1 Eine einfache Methode cp -pist unkompliziert, behält die geänderte Zeit bei (wahrscheinlich der nützlichste der drei Zeitstempel in einer Datei) und erfordert nicht die Erstellung einer Zwischenarchivdatei.
Wberry

1
Soweit ich weiß, vergisst "cp -p" das Erstellungsdatum und setzt es stattdessen auf das Änderungsdatum. Welches ist ein ziemlich absurdes Verhalten.
Nicolas Barbulesco

1
cp -pfunktioniert jedoch nicht beim Kopieren von HFS + nach FAT32.
NobleUplift

9

Ich benutze Rsync , um diese Art von Kopie zu machen. Beachten Sie jedoch, dass die von Apple gelieferte Version 2.6.9 ist und Fehler in dieser Version enthält. Sie müssen also von einem Drittanbieter einen Build erstellen lassen, entweder selbst oder über einen Paketmanager

beispielsweise

rsync -aE source_dir target_dir

Die Option -Ekopiert die ACLs und -abehält die Unix-Berechtigungen und -Zeiten bei. (Nun, es hat auf rsync 2 funktioniert. rsync 3 scheint -AX zu benötigen.)

rsync kann auch so eingerichtet werden, dass auf entfernte Maschinen kopiert wird, ohne dass Laufwerke gemountet werden müssen.

Es gibt einige GUI-Frontends für rsync, zB aRsync . Für andere Verzeichnissynchronisierungstools siehe diese Frage .


rsyncist eine gute Lösung, aber beachten Sie, dass die Zugriffszeiten dadurch nicht erhalten bleiben. pax(siehe meine Antwort unten).
Jaume

1
Soweit ich weiß, vergisst "rsync" das Erstellungsdatum und setzt es stattdessen auf das Änderungsdatum. Welches ist ein großer Fehler.
Nicolas Barbulesco

→ jaume: Jeder Befehl, der eine Kopie von "file a" in Richtung "file b" erstellt, muss zuerst "file a" lesen. Daher sollte die Zugriffszeit von "Datei a" geändert werden. Dies ist keine Funktion auf Befehlsebene, sondern auf Kernelebene. Wenn ein Befehl durch einen anderen Systemaufruf die Zugriffszeit auf den vorherigen Status zurücksetzt, ist dies ein gefährlicher Trick, da es sich um eine reine Lüge handelt .
Dan

→ Nicolas: vgl. man rsyncund suche nach preserve times:) ⇒ Die Antwort von Mark ist richtig.
Dan

1
→ Mark, @daniel - Ich habe gerade rsync unter Mac OS X 10.6.8 getestet. Eine lokale Kopie eines Ordners mit "rsync -rt" vergisst das Erstellungsdatum von Dateien und ersetzt es durch ihr Änderungsdatum. Trotz des Handbuchs für "rsync", das "Bewahre Zeiten" für die Option sagt -t. Der Fehler ist wahrscheinlich auch in Mavericks und Yosemite vorhanden.
Nicolas Barbulesco

4

Verwenden Sie pax. Das Standardformat paxmit dem Namen ustar behält die Änderungs- und Zugriffszeiten für Dateien bei (unter anderem Benutzer-ID, Gruppen-ID, Dateimodus- Bits und erweiterte Attribute wie Spotlight-Kommentare und ACLs). Siehe paxManpage hier für weitere Details.

Erstellen Sie zunächst paxauf jedem Mac ein Archiv und kopieren Sie es wie folgt auf die externe Festplatte:

  1. Öffnen Sie Anwendungen> Dienstprogramme> Terminal.
  2. Geben Sie das Terminal ein:

    $ cd
    

    und ziehen Sie den Ordner, in dem sich die zu kombinierenden Dateien auf diesem Mac befinden, zu Terminal:

    Bildbeschreibung hier eingeben

    Alternativ können Sie den vollständigen Ordnernamen eingeben:

    $ cd /path/to/your\ folder
    

    Dadurch wird der aktuelle Ordner in "Ihr Ordner" geändert.

  3. Archivieren Sie den Ordner mit pax:

    $ cd ..
    $ pax -w "your folder" > yourfolder.ustar
    
  4. Verwenden Sie den Finder, um das neu erstellte Archiv yourfolder.ustarauf die externe Festplatte zu kopieren .

Dann extrahiere die Archive mit pax:

  1. Öffnen Sie das Terminal auf dem Mac, an dem die externe USB-Festplatte angeschlossen ist.

  2. Ändern Sie den aktuellen Ordner mit dem cdoben beschriebenen Befehl in die einzelne Ordnerhierarchie auf der externen Festplatte :

    $ cd /Volumes/externalHDD/path/to/single \folder
    $ ls
    yourfolder.ustar
    yourfolder2.ustar
    yourfolder3.ustar
    
  3. Extrahieren Sie die Archive:

    $ pax -r -p e < yourfolder.ustar
    $ pax -r -p e < yourfolder2.ustar
    $ pax -r -p e < yourfolder3.ustar
    $ ls
    your folder
    your folder 2
    your folder 3
    
  4. Verschieben Sie die Dateien bei Bedarf mit dem Finder (der Finder behält die Dateiänderungen und Zugriffszeiten innerhalb desselben Volumes bei).

(Ich habe dieses Verfahren unter OS X 10.8 (Mountain Lion) getestet.)


1
Funktioniert nicht für Dateinamen, die länger als 200 Zeichen sind community.hpe.com/t5/Ignite-UX/…
amleszk

0

Komprimieren Sie sie mit zip oder wählen Sie sie mit Strg-Klick oder Rechtsklick aus und wählen Sie Komprimieren. Kopieren Sie die komprimierten Dateien auf Ihr Zielsystem und öffnen Sie sie dort.

Wenn Sie können, formatieren Sie Ihr externes Laufwerk als Mac OS-Dateisystem, nicht als FAT.


Nicht mit gedrückter Wahltaste. Strg-Klick. Oder klicken Sie mit der rechten Maustaste.
Nicolas Barbulesco

1
Die beste Wahl zum Formatieren der Festplatte ist Mac OS Extended Journalled. Mac OS Extended wird auch als HFS + bezeichnet.
Nicolas Barbulesco
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.