web-dev-qa-db-fra.com

Comment copier un dossier en conservant les propriétaires et les autorisations intacts?

J'allais donc sauvegarder mon dossier personnel en le copiant sur un disque externe comme suit:

Sudo cp -r /home/my_home /media/backup/my_home

Ainsi, tous les dossiers des disques externes appartiennent désormais à root:root. Comment puis-je avoir cp conserver la propriété et les autorisations de l'original?

410
Psachnodaimonia
Sudo cp -rp /home/my_home /media/backup/my_home

Depuis la page de manuel de cp:

 -p     same as --preserve=mode,ownership,timestamps

 --preserve[=ATTR_LIST]
          preserve the specified attributes (default: mode,ownership,timestamps),
          if possible additional attributes: context, links, xattr, all
496
guido

Vous pouvez également utiliser rsync.

Sudo rsync -a /home/my_home/ /media/backup/my_home/

À partir de la page de manuel rsync:

 -a, --archive
              This  is  equivalent  to  -rlptgoD.  It  is a quick way of saying you want
              recursion and want to preserve almost everything (with -H being a  notable
              omission).    The   only  exception  to  the  above  equivalence  is  when
              --files-from is specified, in which case -r is not implied.

              Note that -a does not preserve hardlinks, because finding  multiply-linked
              files is expensive.  You must separately specify -H.

Voir cette question pour une comparaison entre cp et rsync: https://stackoverflow.com/q/6339287/406686

Notez les barres obliques de fin (voir la page de manuel pour plus de détails).

98
student
cp -a

-a est l'abréviation de --archive - en gros, il copie un répertoire exactement tel qu'il est; les fichiers conservent tous leurs attributs et les liens symboliques ne sont pas déréférencés (-d).

De man cp:

   -a, --archive
          same as -dR --preserve=all
68
Zaz

J'utilise cp -pdRx Qui va -p mode de conservation, propriété et horodatage, -d conserve les liens (vous obtenez donc des liens symboliques à la place du contenu du fichier copié), -R le faire récursivement et -x rester sur un seul système de fichiers (très utile uniquement si vous copiez / ou quelque chose avec un point de montage actif).

PS: -R au lieu de -r est juste l'habitude d'utiliser ls -lR.

21
StarNamer

cp a une option pour préserver la propriété des fichiers. Depuis la page de manuel de cp:

-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 preserved.
14
Matteo

Vous pouvez faire quelque chose comme ça:

tar cf - my_home | (cd /media/backup; Sudo tar xf - )

tar conserve les autorisations, la propriété et la structure du répertoire, mais convertit tout en un flux d'octets. Vous exécutez un "sous-shell" (les commandes entre parenthèses) qui change de répertoire, puis obtenez tar pour inverser la conversion. Une vapeur d'octets devient des répertoires et des fichiers avec une propriété et des autorisations correctes.

12
Bruce Ediger

La réponse est simple: cp a un -p option qui préserve les autorisations (voici un poisson).

Mais comme Wojtek le dit dans son commentaire, man cp (lire le bon manuel) serait un bon point de départ (vous voulez apprendre à pêcher?).

8
buckdeer

vous pouvez utiliser preserve = all, votre copie conservera tous les attributs comme le propriétaire, le groupe et l'horodatage de vos fichiers. Faites donc votre sauvegarde en toute sécurité avec la commande suivante.

cp -r --preserve=all /home/my_home /media/backup/my_home
3
Majid Zarrin