Les horodatages peuvent-ils être conservés lors de la copie de fichiers sur OS X?

14

Je suis intéressé à combiner les fichiers de trois Mac en copiant les fichiers de chacun dans une hiérarchie de dossiers unique de ma conception sur un disque dur externe.

Dans mon expérience passée de copie de fichiers dans OSX, les fichiers perdent parfois leurs horodatages créés et modifiés; c'est-à-dire qu'ils sont modifiés au moment présent où la copie du fichier se produit.

Comment puis-je m'assurer que cela ne se produit pas?

le miroir
la source
Quand perdez-vous les horodatages?
lhf
Les copier comment?
Gerry

Réponses:

11

Je viens de le rencontrer moi-même et la cpcommande intégrée le gère.

J'ai découvert un tas de vieilles cartes CF dont je voulais récolter les photos. Mes scripts de traitement regarderont le fichier mtime pour le mettre au bon endroit, donc j'avais besoin qu'il soit conservé.

Depuis la page de manuel :

 -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.

Donc, en utilisant, zshj'ai pu exécuter ( NO NAMEétant le nom du volume de mes cartes):

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

Je crois que la /**/*construction spéciale est spécifique à ZSH; mais vous pourriez faire quelque chose comme

find /Volumes/WHATEVER -type d -print0 | xargs cp -vp {}/*.JPG /my/out/path
Andrew Burns
la source
+1 Un simple cp -pest simple, préserve l'heure modifiée (probablement le plus utile des trois horodatages d'un fichier) et ne nécessite pas la création d'un fichier d'archive intermédiaire.
wberry
1
Pour autant que je sache, "cp -p" oublie la date de création et la place à la date modif. Ce qui est un comportement assez absurde.
Nicolas Barbulesco du
1
cp -pne fonctionne pas lors de la copie de HFS + vers FAT32.
NobleUplift
9

J'utilise rsync pour faire ce genre de copie. Notez cependant que la version fournie par Apple est 2.6.9 et comporte des bogues. Vous devez donc en faire construire un par un tiers, soit vous-même, soit via un gestionnaire de packages

par exemple

rsync -aE source_dir target_dir

L'option -Ecopie les listes de contrôle d'accès et -apréserve les autorisations et les heures Unix. (eh bien il l'a fait sur rsync 2 rsync 3 semble avoir besoin de -AX)

rsync peut également être configuré pour copier sur des machines distantes sans monter de disques.

Il existe des interfaces graphiques pour rsync, par exemple aRsync . Pour d'autres outils de synchronisation d'annuaire, consultez cette question .

user151019
la source
rsyncest une bonne solution, mais sachez qu'elle ne préserve pas les temps d'accès. pax(voir ma réponse ci-dessous).
jaume
1
Pour autant que je sache, "rsync" oublie la date de création et la place à la date modif. Ce qui est un gros échec.
Nicolas Barbulesco
→ jaume: toute commande faisant n'importe quelle forme de copie de "fichier a" vers "fichier b" doit d'abord lire "fichier a". Par conséquent, le temps d'accès du "fichier a" doit être modifié. Ce n'est pas une fonctionnalité au niveau de la commande mais au niveau du noyau. Si une commande, via un autre appel système, rétablit le temps d'accès à son état précédent, c'est une astuce dangereuse, car c'est un mensonge .
dan
→ Nicolas: cf. man rsyncet recherchez preserve times:) ⇒ la réponse de Mark est correcte.
dan
1
→ Mark, @daniel - Je viens de tester rsync sous Mac OS X 10.6.8. Une copie locale d'un dossier avec "rsync -rt" oublie la date de création des fichiers et la remplace par leur date de modification. Malgré le manuel de "rsync" disant "préserver les temps" pour l'option -t. Le bug est probablement également présent dans Mavericks et Yosemite.
Nicolas Barbulesco
4

Utilisez pax. Le paxformat par défaut , appelé ustar , préserve la modification des fichiers et les temps d'accès (entre autres comme l'ID utilisateur, l'ID de groupe, les bits de mode fichier et les attributs étendus comme les commentaires Spotlight et les ACL). Voir la paxpage de manuel ici pour plus de détails.

Tout d'abord, créez une paxarchive sur chaque Mac et copiez-la sur le disque dur externe comme ceci:

  1. Ouvrez Applications> Utilitaires> Terminal.
  2. Tapez dans le terminal:

    $ cd
    

    et faites glisser le dossier où les fichiers à combiner résident sur ce Mac vers le terminal:

    entrez la description de l'image ici

    Vous pouvez également taper le nom complet du dossier:

    $ cd /path/to/your\ folder
    

    Cela changera le dossier actuel en «votre dossier».

  3. Archivez le dossier avec pax:

    $ cd ..
    $ pax -w "your folder" > yourfolder.ustar
    
  4. Utilisez le Finder pour copier l'archive nouvellement créée yourfolder.ustarsur le disque dur externe.

Extrayez ensuite les archives avec pax:

  1. Ouvrez Terminal sur le Mac sur lequel le disque dur USB externe est branché.

  2. Remplacez le dossier actuel par la hiérarchie de dossiers unique sur le disque dur externe avec la commande cdcomme expliqué ci-dessus:

    $ cd /Volumes/externalHDD/path/to/single \folder
    $ ls
    yourfolder.ustar
    yourfolder2.ustar
    yourfolder3.ustar
    
  3. Extraire les archives:

    $ 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. Déplacez les fichiers avec le Finder si vous en avez besoin (le Finder préserve la modification des fichiers et les temps d'accès dans le même volume).

(J'ai testé cette procédure sur OS X 10.8 (Mountain Lion).)

jaume
la source
1
Ne fonctionne pas pour les noms de fichiers plus longs que 200 caractères community.hpe.com/t5/Ignite-UX/…
amleszk
0

Compressez-les avec zip ou sélectionnez-les avec ctrl-clic ou clic droit et choisissez Compresser. Copiez les fichiers compressés sur votre système cible et ouvrez-les.

Si vous le pouvez, formatez votre disque externe en tant que système de fichiers Mac OS, pas en FAT.

lhf
la source
Pas Option-clic. Ctrl-clic. Ou faites un clic droit.
Nicolas Barbulesco
1
Le meilleur choix pour formater le disque est Mac OS Extended Journalled. Mac OS étendu est également appelé HFS +.
Nicolas Barbulesco