|
|
Page précédente : CP-4 CP-5 :Sommaire :
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 -uL'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. En utilisant cette option, vous ne conserverez donc que la version la plus récente du fichier. Par 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é sur votre disque dur local quelques fichiers du 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/ 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 Auteur : ptyxs (février 2006) Legal: This page is covered by the GNU Free Documentation License . Standard disclaimers of warranty apply. Copyright LSTB and Mandrakesoft. |