Copier un dossier paraît banal jusqu’au jour où le répertoire contient des fichiers cachés, des liens symboliques ou des dates utiles pour un script. cp -r recopie l’arborescence, mais cp -a est souvent le meilleur choix pour dupliquer un dossier de travail sans modifier ses attributs.
Avant de supprimer la source, créez la copie, contrôlez-la et ouvrez quelques fichiers. Une commande réussie ne prouve pas que vous avez visé le bon chemin.

Choisir entre cp -r et cp -a
cp -r descend dans les sous-dossiers. Les entrées qui commencent par un point sont bien incluses lorsque vous copiez le dossier lui-même. Évitez en revanche les globbing du type * si vous attendez aussi les fichiers cachés : le shell les ignore par défaut.
cp -a active le mode archive. Il conserve autant que possible les permissions, propriétaires, dates, liens symboliques et liens physiques. Pour une sauvegarde locale ou une migration de répertoire, c’est généralement la commande à privilégier. Elle peut demander des droits élevés si vous devez préserver un propriétaire que votre compte ne peut pas définir.
cp -a -- /srv/app/ /srv/app-copie/
Le -- sépare les options des chemins. Il évite qu’un fichier commençant par un tiret soit interprété comme une option. Le slash final de la source signifie ici que vous copiez son contenu dans /srv/app-copie/. Si ce dossier existe déjà, vérifiez la structure obtenue avant de continuer.
Préparer une destination sans écraser le mauvais dossier
Créez d’abord une destination clairement nommée, puis listez les deux côtés. Sur un serveur, ne lancez pas une copie récursive vers un chemin construit à la main dans un script sans afficher ce chemin dans les logs.
mkdir -p -- /srv/app-copie
find /srv/app -maxdepth 1 -printf '%f\n' | sort
find /srv/app-copie -maxdepth 1 -printf '%f\n' | sort
Si vous voulez refuser tout écrasement pendant un premier essai, ajoutez -n. Cette option ignore les fichiers déjà présents, donc elle ne convient pas à une synchronisation complète. Pour remplacer des données existantes, faites une sauvegarde ou travaillez dans un nouveau répertoire, puis basculez le service vers la copie validée.
Contrôler les fichiers, les droits et les liens
Commencez par vérifier les fichiers cachés et les droits. ls -la affiche les noms commençant par un point. stat permet de comparer les permissions et les dates d’un fichier sensible.
ls -la /srv/app
ls -la /srv/app-copie
stat -c '%n %a %U:%G %y' /srv/app/config.ini /srv/app-copie/config.ini
find /srv/app-copie -type l -ls
La dernière commande liste les liens symboliques. Avec cp -a, un lien reste normalement un lien. Avec une copie moins adaptée, vous pouvez vous retrouver avec le contenu de sa cible ou un lien devenu invalide après déplacement.
- comptez les fichiers avec
find ... -type f | wc -l; - ouvrez le fichier de configuration le plus important ;
- testez le programme contre la copie avant de supprimer la source ;
- conservez la source tant que le service ou le script n’a pas passé son contrôle fonctionnel.
Pour comparer le contenu de deux arborescences, diff -qr /srv/app /srv/app-copie signale les fichiers qui diffèrent. Il ne remplace pas une validation applicative, mais il détecte rapidement une copie incomplète.
Si vous devez aussi corriger les permissions après une duplication, le guide sur chmod récursif sous Linux explique pourquoi un chmod -R lancé trop vite peut casser des exécutables. Pour retrouver un fichier avant la copie, utilisez aussi find sous Linux.