|
|
Copie-5 : Copie de répertoires (suite) - Copie et écrasement (suite et fin)
Page précédente : CP-4 - Copie de répertoires Page suivante : CP-6 : Créer un nouvel exemplaire d'un fichier - Autocopie ? Toutes les pages sur la copie - Index de la section - Index de la Base de Connaissances Reproduire le contenu d'un répertoire existant dans un autre répertoire existantNous avons vu à la page précédente :
Pour cela, on utilise l'expansion des noms de fichiers. Plus spécifiquement, nous allons faire usage ici du 'méta-caractère' (ou 'joker') '*' (aussi appelé 'l'étoile'). Par exemple, pour copier le contenu du répertoire panades/ (mais non le répertoire panades/ lui-même) dans un répertoire soupes/ qui existe déjà, on pourra faire ceci : cp -a panades/* soupes/ Qu'on se le dise une bonne fois : pas d'écrasement !!Bien sûr, dans un répertoire existant, comme notre soupes/ de la section précédente, il peut y avoir des tas de choses qu'on peut avoir envie de préserver de tout écrasement intempestif. Rien là de bien nouveau pour le lecteur soigneux de ces pages que vous êtes : l'option '-i' et l'alias de Mandriva, dont nous avons parlé en CP-3, qui remplace 'cp' par 'cp -i' règlent la question, me direz-vous. Certes. Mais imaginez qu'il y ait un très grand nombre de fichiers 'écrasables' dans soupes/… Vous voyez le problème ? Répondre 'n' cinq fois à 'cp', bon, mais 93 fois ?? Terrifiant… Pour trouver un peu d'apaisement, poursuivez donc votre lecture, cette section - ou la suivante - vous permettront peut-être d'éviter une telle situation... Il existe une option de 'cp' qui vous permet de lui dire une bonne fois que vous répondez 'n', (autrement dit : 'non'), à toutes les questions… c'est l'option '--reply'. Vous pourrez parvenir à ce résultat en donnant à '--reply' la valeur 'no', comme dans la ligne de commande ci-dessous - il est évidemment nécessaire que les bonnes questions soient posées et donc d'activer aussi l'option '-i' : cp -ai --reply=no panades/* soupes/ Vous trouverez un exemple d'emploi de ce type de commande dans l'encadré final de la page de la Base de Connaissances de Mandriva sur la conversion de man en Latin1. Toutes les pages sur la copie - Index de la section - Index de la Base de Connaissances N'écraser que les plus vieux avec -uDescription de l'option
Dans le cas standard où vous ne modifiez jamais la copie directement, cette option s'emploie pour mettre à jour une copie déjà existante, en se bornant à y copier les "éléments nouveaux" : 1) y remplacer les fichiers qui ont été modifiés dans l'original (la source) depuis la dernière copie 2) copier les répertoires ou fichiers nouveaux, créés dans l'original depuis la dernière copie.
L'option -u (de l'anglais update = mettre à jour) permet de réserver l'écrasement à des cas où un fichier du répertoire source possède, non seulement un nom identique à celui d'un fichier du répertoire de destination, mais aussi une date postérieure à celle du fichier du répertoire de destination.
Permet donc alors de ne pas remplacer inutilement ce qui n'a pas été modifié. Economise, de ce fait, du temps et aussi de l'usure des organes mécaniques de l'ordinateur qui jouent un rôle lors de la copie, par rapport à une copie "brutale" qui copierait tout et écraserait un fichier destination même quand il est strictement identique à un fichier de la source. Le cas échéant, si vous avez modifié la copie directement, permet aussi de conserver sur la copie une version d'un fichier qui serait plus récente dans la copie que la version présente sur le répertoire source. Cette propriété permet d'utiliser l'option pour synchroniser des répertoires, comme nous le verrons plus bas. En utilisant cette option, vous conserverez donc toujours la version la plus récente du fichier, qu'elle se trouve initialement dans la source ou dans la destination; elle vous protège contre l'effacement intempestif d'une version récente qui se trouverait (par accident ?) sur la copie. Emploi de -u pour une mise à jourPar exemple, si vous avez copié un répertoire et tout son contenu sur un disque dur externe ou sur une clé USB et si, depuis lors, sans avoir touché au support externe, vous avez modifié ou créé, sur votre disque dur local, quelques fichiers dans le répertoire en question, vous pourrez effectuer une mise à jour du disque externe par une commande analogue à celle-ci : cp -ua projets_encours/* /mnt/CLE_USB/projets_encours/ Emploi de -u pour une synchronisationSi vous avez modifié directement des fichiers ET sur la source ET sur la destination, vous pouvez les synchroniser, autrement dit faire en sorte que l'un et l'autre contiennent la version la plus récente, en utilisant la commande complexe suivante : cp -ua projets_encours/* /mnt/CLE_USB/projets_encours/ && cp -ua /mnt/CLE_USB/projets_encours/* projets_encours/ Limitation : le cas d'une partition "vfat"
Malheureusement, en raison d'une gestion différente des propriétés, si le disque ou la partition destination est de type 'vfat', l'option -u est inopérante.
Ecraser un répertoire ? Mais c'est inécrasable, ça !Pour bien comprendre ce que vous faites lorsque vous procédez à une copie 'récursive" (autrement dit une copie susceptible de copier des répertoires), il peut être utile de comparer avec soin certains aspects du fonctionnement des deux lignes de commande suivantes : cp -a prune.txt confitures/ cp -a agrumes/ confitures/ La seconde ligne vise, elle, à copier un répertoire à la racine du répertoire de destination (confitures/). Mais, cette fois, s'il se trouve que confitures/ contient à sa racine, un répertoire homonyme (confitures/agrumes/), alors, ce répertoire ne court en aucun cas le risque d'être écrasé. Il ne sera pas purement et simplement remplacé par une copie. Il se passera plutôt ceci : le contenu du répertoire agrumes/ sera copié dans le répertoire déjà existant confitures/agrumes/. Quelle différence cela fait-il ? Eh bien, si le répertoire confitures/agrumes/ avait un contenu propre avant l'opération, il le conservera. Illustrons. Supposons qu'avant la copie, agrumes/ contenait les fichiers :
Tout cela est général, et vaudrait aussi en cas de copie de sous-répertoires plus profondément enfouis dans l'arborescence. Un répertoire ou un sous-répertoire, à la différence d'un fichier, n'est jamais écrasé par la copie. Notez qu'il en va de même si vous effectuer une copie "à la main", dans une interface graphique comme Konqueror. Et si je voulais, moi, que le répertoire de destination soit écrasé ?! Dans notre exemple, vous n'auriez alors qu'à effacer le répertoire en question avant copie : rm -rf /confitures/agrumes/ ; cp -a agrumes/ confitures/ Après exécution de cette ligne de commande, le contenu de confitures/agrumes/ serait bien sûr :
Page suivante : CP-6 : Créer un nouvel exemplaire d'un fichier - Autocopie ? Auteur : ptyxs (février 2006) - Dernière révision : septembre 2006. Legal: This page is covered by the GNU Free Documentation License . Standard disclaimers of warranty apply. Copyright LSTB and Mandrakesoft. |
Laisse, par conséquent, intacts les fichiers déjà copiés même s'ils ont été modifiés dans l'original. Permet donc de conserver des versions anciennes de fichiers déjà copiés.