Différence entre cp -r et cp -a

174

Je cherche la différence entre cp -ret cp -a. Que signifie "récursif" en termes de copie de fichiers d'un dossier?

Excité
la source
62
Certaines personnes cherchent une meilleure explication dans les pages de manuel, car la description n’est pas toujours claire. J'ai dû creuser plusieurs fois et tester / expérimenter pour comprendre ce qui se passe réellement avec une commande particulière. La page de manuel de grep peut me confondre tous les jours.
Joe
2
Je peux comprendre votre frustration, mais à mon avis, la meilleure façon d’apprendre consiste à tester et à expérimenter.
Tripledes
37
OU apprenez en posant des questions ici, en obtenant la réponse d’une manière que vous comprenez, puis en ayant une meilleure idée de ce qu’il faut faire pour tester et expérimenter. S'il vous plaît gardez à l'esprit que fonctionne pour vous très souvent ne fonctionne pas pour moi, etc. etc.
Will Lanni

Réponses:

199

Récursif signifie que cpcopie le contenu des répertoires. Si un répertoire contient des sous-répertoires, ils sont également copiés (de manière récursive). Sans cela -R, la cpcommande ignore les répertoires. -rest identique à -Rsous Linux, il diffère dans certains cas particuliers sur certaines variantes Unix.

Par défaut, cpcrée un nouveau fichier ayant le même contenu que l'ancien fichier et les mêmes autorisations, mais restreint par l' umask . la copie est datée de l'heure de la copie et appartient à l'utilisateur qui la copie. Avec l' -poption, la copie a la même heure de modification, la même heure d'accès et les mêmes autorisations que l'original. Il a également le même propriétaire et le même groupe que l'original, si l'utilisateur qui copie a le droit de créer de tels fichiers.

L' -aoption signifie -Ret -p, plus quelques autres options de préservation. Il tente de réaliser une copie aussi proche que possible de l'original: même arborescence de répertoires, mêmes types de fichiers, même contenu, mêmes métadonnées (heures, autorisations, attributs étendus, etc.).

Gilles
la source
36
Au fond, sauf si vous voulez quelque chose de spécial, vous avez besoin jamais -rparce que -a(pour archive) est toujours le plus sûr et probablement ce que vous vous attendiez.
ams
2
@am Oui, c'est un bon résumé. La seule raison courante d'utilisation -rest que vous utilisez une variante unix autre que Linux -aet que vous utiliseriez généralement cp -rp. Ou rsync -a.
Gilles
Parfois, les autorisations permettent -r mais pas -a
DrCord
Pas -r, pas -R ne fonctionne pas dans Ubuntu 18
Arkady
17

L'option -r ou -R pour "récursive" signifie qu'elle copiera tous les fichiers, y compris les fichiers à l'intérieur des sous-dossiers.

L'option -a telle qu'elle est répertoriée est identique à -dR, ce qui signifie qu'elle préservera les liens et copiera le contenu des sous-répertoires. En préservant les liens, cela signifie que les liens ne seront pas suivis car ils sont copiés de manière récursive.

Joe
la source