111 votes

Comment copier un fichier sous Unix sans modifier son heure de dernière modification ?

Si je copie un fichier d'un endroit à un autre en utilisant cp l'horodatage du fichier copié est fixé à l'heure de la copie.

Y a-t-il un moyen d'éviter cela ?

J'ai besoin de copier des fichiers sans modifier leur horodatage.

131voto

Thej Points 655

cp -p fait l'affaire. Pour Linux :

-p même que --preserve=mode,ownership,timestamps

Pour FreeBSD :

-p Faites en sorte que cp préserve les attributs suivants de chaque fichier source dans la copie : heure de modification, heure d'accès, drapeaux de fichier, mode de fichier, ACL, ID utilisateur et ID groupe, comme le permettent les autorisations.

Et pour OS X :

-p Faites en sorte que cp préserve les attributs suivants de chaque fichier source dans la copie : heure de modification, heure d'accès, drapeaux de fichier, mode de fichier, ID utilisateur et ID groupe, comme le permettent les autorisations. Les listes de contrôle d'accès (ACL) et les attributs étendus (EA), y compris les fourchettes de ressources, seront également préservés.

Notez que cela peut/va changer le fichier source le temps d'accès (atime), comme le montre le tableau suivant ls -lu . Aussi, stat o stat -x peut être utilisé pour afficher joliment les temps d'accès aux données, de modification des données et de changement d'état des fichiers, à laquelle, pour macOS, l'heure de naissance peut être ajoutée en utilisant un formatage explicite :

stat -f "%n%N%nAccess (atime): %Sa%nModify (mtime): %Sm%nChange (ctime): %Sc%nBirth  (Btime): %SB%n" *

20voto

Stefan Schmidt Points 578

Lorsque vous utilisez cp de la GNU Coreutils pour ne conserver que les horodatages et non les attributs tels que l'identifiant de l'utilisateur, l'identifiant du groupe ou le mode du fichier, il existe la version longue de la méthode --preserve qui permet de spécifier explicitement une liste d'attributs à préserver.

cp --preserve=timestamps source destination

Sachez toutefois que cette syntaxe n'est probablement pas prise en charge par d'autres Unités. Une alternative pourrait être d'utiliser l'option --times paramètre de rsync qui devrait être disponible sur la plupart des installations.

15voto

Il y a trois temps sur un système de fichiers Unix, le temps d'accès (atime), le temps de modification (mtime), et le temps de changement d'inode (ctime). Vous pouvez changer le temps d'accès et le temps de modification avec le programme touch, par exemple

cp orig copy
touch -r orig copy

Cependant, vous ne pouvez pas modifier le temps de changement des inodes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X