Linux / Commandes / cp - commande pour copier, mv - commande pour déplacer
Sous Linux, cp copie des fichiers ou des répertoires, et mv déplace des fichiers ou des répertoires ou les renomme. Le résultat des deux commandes diffère selon que le chemin final est un répertoire existant, vous devez donc vérifier le chemin cible avant d'exécuter.
Différence entre copier et déplacer
Les formats de base des deux commandes sont cp source destination et mv source destination. Copier laisse une copie séparée de l'original, mais déplacer ou renommer supprime l'élément du chemin d'origine après réussite. Les exemples suivants sont basés sur cp et mv des utilitaires GNU coreutils.
Les fichiers existants peuvent être écrasés en utilisant le même nom, donc vérifiez le chemin et le contenu cible et préparez les sauvegardes nécessaires avant de manipuler des données importantes. La pratique ci-dessous est effectuée dans un répertoire vide nouvellement créé.
Préparation des fichiers de pratique
L'exemple suivant montre lorsque le répertoire cp-mv-practice n'existe pas encore dans l'emplacement actuel. Si un répertoire du même nom existe déjà, pratiquez dans un autre emplacement vide. Si la première commande échoue, ne poursuivez pas avec les commandes suivantes.
mkdir cp-mv-practice
cd cp-mv-practice
printf 'Hello Linux\n' > note.txt
mkdir target
ls
Le fichier note.txt et un répertoire vide target sont affichés. Les exemples suivants sont exécutés dans l'ordre dans ce répertoire. > de printf écrasera le contenu si un fichier du même nom existe, donc utilisez-le dans un emplacement sans données réelles.
Copie de fichiers
La commande suivante copie note.txt vers copy.txt dans le répertoire actuel. En cas de succès, l'original et la copie existeront tous deux.
cp note.txt copy.txt
ls
cat copy.txt
cat affiche le contenu du fichier copié, Hello Linux. La commande suivante le copie dans le répertoire existant target avec le nom d'origine.
cp note.txt target/
ls target
Si le nom cible spécifié n'est pas un répertoire existant, un fichier portant ce nom peut être créé ou un fichier existant peut être écrasé. Par conséquent, si target est un répertoire, cp note.txt target copie le fichier à l'intérieur, mais s'il n'existe pas, un fichier nommé target sera créé. Pour le copier sous un nom différent à l'intérieur d'un répertoire, spécifiez le chemin cible complet comme indiqué dans cp note.txt target/other.txt.
Copie de répertoires
Utilisez l'option récursive -r lors de la copie d'un répertoire et de son contenu. La commande suivante copie le répertoire précédemment créé target vers target-copy, qui n'existe pas encore.
cp -r target target-copy
ls target-copy
En conséquence, target-copy/note.txt est créé et le target/note.txt original reste. En revanche, si le répertoire cible existe déjà, le répertoire original est généralement placé à l'intérieur. Par exemple, l'exécution de cp -r target target-copy à nouveau peut créer target-copy/target. Vérifiez la cible avec ls avant de lancer l'opération.
GNU cp -a tente de préserver les attributs tels que les liens, les permissions et les horodatages autant que possible lors des copies récursives. Tous les attributs ne sont pas garantis d'être préservés selon les permissions ou la prise en charge du système de fichiers cible. La gestion des liens symboliques varie également selon les options, donc vérifiez les données importantes après la copie. Pour plus de détails, référez-vous au manuel GNU cp.
Déplacement et renommage de fichiers
La commande suivante renomme le copy.txt précédemment créé en renamed.txt. Si elle réussit, copy.txt disparaît et renamed.txt est affiché.
mv copy.txt renamed.txt
ls
Ensuite, déplacez le fichier dans un répertoire existant. renamed.txt n'existe plus à son emplacement d'origine, et target/renamed.txt est créé.
mv renamed.txt target/
ls target
Lors du déplacement ou du renommage d'un répertoire, utilisez mv, et -r de cp n'est pas requis. Si le répertoire cible existe déjà, il y sera déplacé, et si le cible n'existe pas, il est déplacé avec le nom spécifié. S'il entre en conflit avec un répertoire existant non vide, il peut échouer, donc ne supposez pas qu'il se fusionne comme la copie.
Entre différents systèmes de fichiers, GNU mv peut le gérer en supprimant l'original après la copie. Les grandes quantités de données peuvent prendre du temps, et si l'opération échoue au milieu, seule une partie peut être déplacée, donc vérifiez les résultats des deux côtés. Vous pouvez consulter les conditions détaillées dans le manuel GNU mv.
Vérifications de l'écrasement et des erreurs de chemin
Pour recevoir une confirmation avant d'écraser un fichier existant, utilisez -i. Voici un scénario pratique où un fichier du même nom existe déjà. Lorsque les instructions apparaissent, lisez-les et approuvez uniquement si vous avez l'intention de l'écraser.
cp -i note.txt target/note.txt
mv -i demande également avant de remplacer un fichier cible existant. La confirmation interactive ne remplace pas la gestion des conflits dans les scripts automatisés, donc dans les scripts, vérifiez séparément le comportement prévu et le statut de sortie. Le comportement par défaut peut différer dans les environnements où les commandes sont définies comme alias.
- Lorsqu'il y a des espaces dans le chemin : Entourez chaque chemin de guillemets comme dans
cp "my file.txt" "target/my file.txt". - Lorsqu'un fichier ou un répertoire ne peut pas être trouvé : Vérifiez l'emplacement actuel, l'orthographe et la casse en utilisant
pwdetls. - Lorsqu'une erreur d'autorisation se produit : Vérifiez que vous disposez de l'autorisation de lecture pour la source et de l'autorisation d'écriture pour la destination, et vérifiez également les autorisations requises dans le répertoire source lors du déplacement. Si vous n'avez pas les autorisations, demandez-les à l'administrateur.
Après avoir vérifié les résultats pratiques, si nécessaire, vous pouvez supprimer le répertoire cp-mv-practice en utilisant un outil de gestion de fichiers. Il existe également des outils comme Midnight Commander qui permettent de copier et de déplacer des fichiers tout en visualisant la liste des fichiers, mais leur installation sur le serveur et les autorisations d'utilisation dépendent de l'environnement.




