Ich bin daran interessiert, die Dateien von drei Macs zu kombinieren, indem ich die Dateien von jedem in eine einzelne Ordnerhierarchie meines Designs auf einer externen Festplatte kopiere.
In meiner bisherigen Erfahrung beim Kopieren von Dateien in OSX verlieren die Dateien manchmal ihre Erstellt- und Geändert-Zeitstempel; dh sie werden bis zum gegenwärtigen Moment geändert, wenn die Datei kopiert wird.
Wie kann ich sicherstellen, dass dies nicht passiert?
Ich bin gerade selbst darauf gestoßen, und der eingebaute cp
Befehl handhabt es tatsächlich.
Ich habe einen Haufen alter CF-Karten entdeckt, von denen ich die Bilder ernten wollte. Meine Verarbeitungsskripte sehen sich die Datei mtime an, um sie an der richtigen Stelle abzulegen, also musste ich sie erhalten.
Aus 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, mit zsh
konnte ich laufen ( NO NAME
wobei es sich um den Volumennamen meiner Karte handelt):
cp -rvp /Volumes/NO\ NAME/DCIM/**/*.{JPG,jpg} ~/Desktop/tmp/pics
Ich glaube, dass das spezielle /**/*
Konstrukt spezifisch für ZSH ist; Sie könnten jedoch so etwas tun
find /Volumes/WHATEVER -type d -print0 | xargs cp -vp {}/*.JPG /my/out/path
cp -p
ist unkompliziert, behält die geänderte Zeit bei (wahrscheinlich der nützlichste der drei Zeitstempel in einer Datei) und erfordert keine Erstellung einer Zwischenarchivdatei.cp -p
funktioniert jedoch nicht beim Kopieren von HFS+ nach FAT32.Ich verwende rsync , um diese Art von Kopie zu erstellen. Beachten Sie jedoch, dass die von Apple bereitgestellte Version 2.6.9 ist und diesbezüglich Fehler aufweist. Sie müssen sich also einen Drittanbieter bauen lassen, entweder selbst bauen oder über einen Paketmanager
zum Beispiel
rsync -aEAX source_dir target_dir
Die Option -E
kopiert die ACLs und -a
behält die Unix-Berechtigungen bei und mal A kopiert die ACLs und X kopiert die xattributes (onm rsyn Version 3. Version 2 hat kein AX)
rsync
kann auch so eingerichtet werden, dass es auf Remote-Rechner kopiert werden kann, ohne Laufwerke zu mounten.
Es gibt einige GUI-Frontends für rsync, zB aRsync . Informationen zu anderen Tools zur Verzeichnissynchronisierung finden Sie in dieser Frage .
rsync
ist eine gute Lösung, aber beachten Sie, dass die Zugriffszeiten nicht erhalten bleiben. pax
(siehe meine Antwort unten) tut.man rsync
und suche nach preserve times
:) ⇒ die Antwort von Mark ist richtig.-t
. Der Fehler ist wahrscheinlich auch in Mavericks und Yosemite vorhanden.Verwenden Sie pax
. Das Standardformat mit dem pax
Namen ustar bewahrt die Dateiänderungs- und Zugriffszeiten (unter anderem wie Benutzer-ID, Gruppen-ID, Dateimodusbits und erweiterte Attribute wie Spotlight-Kommentare und ACLs). Siehe pax
Manpage hier für weitere Details.
Erstellen pax
Sie zunächst auf jedem Mac ein Archiv und kopieren Sie es wie folgt auf die externe Festplatte:
Terminal eingeben:
$ cd
und ziehen Sie den Ordner, in dem sich die zu kombinierenden Dateien auf diesem Mac befinden, in das Terminal:
Alternativ können Sie den vollständigen Ordnernamen eingeben:
$ cd /path/to/your\ folder
Dadurch wird der aktuelle Ordner in „Ihr Ordner“ geändert.
Archivieren Sie den Ordner mit pax
:
$ cd ..
$ pax -w "your folder" > yourfolder.ustar
Verwenden Sie den Finder, um das neu erstellte Archiv yourfolder.ustar
auf die externe Festplatte zu kopieren.
Entpacken Sie dann die Archive mit pax
:
Öffnen Sie Terminal auf dem Mac, an den die externe USB-Festplatte angeschlossen ist.
Ändern Sie den aktuellen Ordner in die einzelne Ordnerhierarchie auf der externen Festplatte mit dem Befehl cd
wie oben beschrieben:
$ cd /Volumes/externalHDD/path/to/single \folder
$ ls
yourfolder.ustar
yourfolder2.ustar
yourfolder3.ustar
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
Verschieben Sie die Dateien bei Bedarf mit dem Finder (der Finder behält Dateiänderungen und Zugriffszeiten innerhalb desselben Volumes bei).
(Ich habe dieses Verfahren unter OS X 10.8 (Mountain Lion) getestet.)
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.
Ich habe versucht, was Jaume oben vorgeschlagen hat (danke Jaume!), aber für mich (auf meiner sehr alten Hardware) war das Erstellen von .ustar-Dateien zu zeitaufwändig und mir ging die Geduld aus ... Stunden später.
Also habe ich die Beispiele hier gelesen und ein Beispiel so angepasst:
pax -r -u -w [source directory] [destination directory]
In meinem Fall habe ich das Verzeichnis mit dem Befehl ‚cd‘ gewechselt und überprüft, ob das Terminal mein Quellverzeichnis ‚User‘ mit dem Befehl ‚ls‘ sehen konnte, bevor es ausgeführt wurde:
pax -r -u -w User /Volumes/T7
Das Ergebnis war, dass alle Dateien ihr ursprüngliches Änderungs-/Erstellungsdatum beibehielten – aber Verzeichnisse hatten „heute“ als Änderungsdatum und ursprüngliches Datum für „Erstellungsdatum“.
Das war gut genug für mich!
PS: Ich bin mir nicht sicher, ob Pax in Darwin integriert ist, da ich TigerBrew vor dem Start installiert habe, aber ich habe das alles unter OS X 10.7.5 gemacht.
Kann es Verzeichniszeitstempel für das Erstellungsdatum, das Änderungsdatum und das Zugriffsdatum von Mac OS oder Linux auf Windows 10 beibehalten?
lhf
Gerry