Créer et manipuler des fichiers
Créer, copier, déplacer, renommer et supprimer des fichiers et dossiers.
Objectifs
À la fin de cette leçon, vous saurez :
- créer des dossiers et des fichiers avec
mkdirettouch; - copier avec
cpet déplacer ou renommer avecmv, en prédisant le résultat ; - supprimer avec
rmen connaissant précisément les dangers ; - nommer vos fichiers pour éviter les pièges (espaces, extensions, fichiers cachés).
🔗 Pour vous rafraîchir la mémoire : navigation dans l'arborescence (
cd,pwd)
Créer des dossiers
mkdir projet
mkdir -p projet/documents projet/images
mkdir (make directory) crée un dossier. La deuxième ligne montre deux choses à la fois : -p et le fait qu'une commande accepte plusieurs arguments — ici, deux dossiers créés d'un coup.
Que fait exactement -p ? Comparons :
$ mkdir projet/documents/sous-dossier
mkdir: impossible de créer le dossier «projet/documents/sous-dossier»:
Aucun fichier ou dossier de ce type
Sans -p, la commande échoue si un maillon intermédiaire manque : on ne peut pas créer le petit-fils avant le fils. Avec -p :
mkdir -p projet/documents/sous-dossier
le shell crée toute la chaîne d'un coup : projet, puis documents, puis sous-dossier. Et si tout existe déjà, -p ne dit rien et ne se plaint pas : relancer la commande est sans danger. C'est pourquoi les scripts professionnels utilisent presque toujours mkdir -p.
Astuce compacte : mkdir -p projet/{documents,images,scripts} crée les trois sous-dossiers d'un coup — le shell développe les accolades en plusieurs chemins avant d'appeler mkdir.
Créer des fichiers vides
touch notes.txt
ls -l notes.txt
-rw-r--r-- 1 cours cours 0 Jan 12 09:20 notes.txt
touch crée un fichier vide (taille 0). S'il existe déjà, il ne l'efface pas : il met juste à jour sa date de modification. C'est un geste d'initialisation, pas d'édition — pour écrire du contenu, on utilisera nano (éditeur) ou les redirections (leçon 1-05).
Pourquoi créer un fichier vide alors ? Pour réserver un emplacement, préparer une structure avant de remplir, ou dans des scripts. Au quotidien, vous créerez souvent directement via l'éditeur : nano notes.txt crée et ouvre en une fois.
Nommer ses fichiers : trois règles qui évitent des ennuis
1. L'extension est une convention, pas une obligation. Linux identifie un fichier par son contenu réel, pas par son nom. Un fichier rapport.txt contenant du code HTML ne deviendra pas une page web. Mais l'extension reste précieuse : elle documente l'intention (README.md, script.sh, index.html) et aide les programmes à choisir comment interpréter le contenu. Adoptez-la systématiquement.
2. Évitez les espaces dans les noms. Rappelez-vous la grammaire du shell : l'espace découpe. Un fichier nommé mon rapport.txt posera problème :
$ cp mon rapport.txt sauvegarde/
cp: impossible d'évaluer 'mon' : Aucun fichier ou dossier de ce type
cp: impossible d'évaluer 'rapport.txt' : Aucun fichier ou dossier de ce type
Le shell a découpé en deux arguments : mon et rapport.txt. Deux solutions si vous rencontrez un tel nom : le quoter (cp "mon rapport.txt" sauvegarde/) ou échapper chaque espace (cp mon\ rapport.txt sauvegarde/). Mais la vraie bonne pratique est préventive : utilisez tirets ou underscores — mon-rapport.txt.
3. Un nom commençant par un point cache le fichier. .secret n'apparaît pas dans ls, seulement dans ls -a. C'est ainsi que les outils stockent leur configuration sans encombrer vos listes (.bashrc, .gitignore que vous rencontrerez au chapitre 7).
Copier avec cp
$ cp notes.txt notes-copie.txt
$ ls
notes-copie.txt notes.txt
cp source destination duplique : il y a désormais deux fichiers indépendants. Modifier l'un ne touche jamais l'autre.
Deux comportements à connaître :
- si la destination est un dossier existant, la copie atterrit dedans, avec son nom d'origine :
$ cp notes.txt projet/
$ ls projet
notes.txt
- si la destination est un chemin complet, c'est un renommage à la volée :
cp notes.txt projet/notes-janvier.txt # copie + nouveau nom en une fois
⚠️ Danger silencieux : si la destination existe déjà, cp écrase sans demander et sans rien dire. Vous venez de perdre l'ancien contenu, sans message ni corbeille. L'option -i (interactive) demande confirmation avant chaque écrasement : cp -i source destination. À connaître absolument.
Pour copier un dossier entier, ajoutez -r (recursive) :
cp -r projet projet-sauvegarde
Pourquoi cette obligation ? Parce qu'un dossier n'est pas une donnée mais un conteneur : copier « récursivement » signifie descendre dans l'arbre et copier chaque fichier et sous-dossier, un à un. Sans -r, cp refuse poliment :
$ cp projet sauvegarde
cp: -r non spécifié ; omission du répertoire 'projet'
Déplacer et renommer avec mv
Une seule commande fait les deux gestes, et la distinction tient au seul argument final :
mv notes.txt ~/ # déplacement : destination = dossier
mv notes.txt journal.txt # renommage : même dossier, autre nom
mv notes.txt ~/cours/journal.txt # les deux : déplacement + renommage
La logique est toujours la même : mv fait exister l'entrée sous un nouveau chemin et disparaître de l'ancien. Il n'y a jamais de doublon — contrairement à cp. Vérifions :
$ mv notes.txt journal.txt
$ ls
journal.txt notes-copie.txt # notes.txt a disparu
Même danger que pour cp : mv écrase silencieusement une destination existante. Même parade : mv -i.
Détail de mécanique interne, utile pour comprendre : déplacer un fichier dans le même disque ne déplace aucune donnée, ça reécrit seulement son étiquette d'emplacement — instantané, même sur un fichier géant. C'est aussi pour cela que mv sert couramment de « renomme ».
Supprimer avec rm
$ rm journal.txt
$ ls
notes-copie.txt # plus de journal.txt
rm (remove) supprime. Trois vérités à intégrer définitivement :
- C'est définitif. Pas de corbeille, pas d'annuler. Le fichier disparaît immédiatement.
- Pour un dossier, il faut
-r(même logique quecp -r: descendre dans l'arbre) :rm -r projet-sauvegarde. - **
-f(force) fait taire les questions de sécurité. La combinaisonrm -rfest la plus dangereuse du terminal : elle efface un arbre entier sans rien demander. On l'utilise dans des scripts maîtrisés — jamais « pour voir ».
Le réflexe prudent quand on n'est pas sûr de soi :
rm -ri projet-vieux # demande confirmation pour chaque élément
rm: descendre dans le répertoire 'projet-vieux' ? o
rm: supprimer fichier régulier 'projet-vieux/brouillon.md' ? o
Chaque suppression attend un o (oui) ou n (non). Lire chaque question prend cinq secondes ; regretter une mauvaise réponse coûte beaucoup plus.
Enfin, rmdir existe : il ne supprime que les dossiers vides et refuse le reste. Ce refus en fait un outil sûr pour faire du ménage léger.
$ rmdir projet/images
$ rmdir projet/documents
rmdir: échec de suppression de 'projet/documents':
Le dossier n'est pas vide
Exercice
Créez cette structure dans votre répertoire personnel :
projet/
├── documents/
├── images/
├── scripts/
└── sauvegardes/
Puis :
- créez un fichier
notes.txtdansprojet/documents; - copiez ce fichier dans
projet/sauvegardes; - déplacez la copie dans
projet/imagesen la renommantvieux-notes.txt; - supprimez
vieux-notes.txt; - listez toute la structure en partant de votre répertoire personnel ;
- question de réflexion : après ces opérations, où se trouve(nt) le(s) fichier(s) restant(s), et combien de copies ont existé au total ?
Résumé
mkdir -pcrée une arborescence complète et tolère les redoublements.touchinitialise un fichier vide ;nano(ou les redirections) écrit dedans.cpduplique (deux fichiers indépendants) ;-robligatoire pour un dossier.mvdéplace ou renomme, sans jamais laisser de doublon.rmsupprime définitivement ;-rpour les dossiers,-ipour réfléchir,-rfà manipuler comme une arme.- Noms : extension conseillée, pas d'espaces, point initial = caché.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Série complète de commandes :
cd ~
mkdir -p projet/documents projet/images projet/scripts projet/sauvegardes
touch projet/documents/notes.txt
cp projet/documents/notes.txt projet/sauvegardes/notes.txt
mv projet/sauvegardes/notes.txt projet/images/vieux-notes.txt
rm projet/images/vieux-notes.txt
ls -R projet
Résultat final attendu :
projet:
documents images scripts sauvegardes
projet/documents:
notes.txt
projet/images:
projet/scripts:
projet/sauvegardes:
ls -R liste récursivement : chaque sous-dossier est présenté après son parent.
Question 6. Trois exemplaires ont existé successivement : l'original dans documents, sa copie dans sauvegardes, puis cette copie rebaptisée vieux-notes.txt dans images. Il ne reste qu'un fichier : l'original, dans projet/documents/notes.txt. Le piège classique de cet exercice : croire qu'on a perdu quelque chose parce que le fichier « a changé de nom ». En réalité, cp a créé un second exemplaire, et toutes les opérations suivantes (mv, rm) n'ont porté que sur ce second exemplaire. Suivre les copies mentalement — quel fichier est passé où — est le vrai apprentissage de cette séquence.
Pièges fréquents observés
mkdir projet/documentssans-palors queprojetn'existe pas encore → erreur. Relisez le message : il dit exactement quel maillon manque.cp notes.txt projetau lieu decp notes.txt projet/documents: le fichier atterrit directement dansprojet. Conséquence de la règle « destination = dossier existant → copie dedans ».- Confondre
cpetmv: après unmv, l'origine n'existe plus. Si votrelssemble « perdre » un fichier, cherchez-le avecpwdetlsplutôt que de le recréer en panique.