web-dev-qa-db-fra.com

Copier un répertoire sous Unix

Comment copier une structure de répertoires dir1, dir2 (avec tous les sous-répertoires) sous Unix à l’aide de la fenêtre du terminal?

73
Dinesh Kumar
cp -rf /source/path/ /destination/path/

-r = récursif, copie tous les sous-répertoires

-f = force, si un fichier de destination existant ne peut pas être ouvert, supprimez-le et réessayez.

Remarque Vous devez faire attention lorsque vous utilisez l'indicateur -f car il écrasera de manière forcée tout ce que vous copiez. Merci @ Nifle pour cette suggestion.

Vous pouvez utiliser le caractère générique * pour copier tous les fichiers du répertoire si vous en avez besoin.

103
qroberts

Alors que les réponses cp -R sont correctes (dans le cas contraire, le drapeau BSD doit être majuscule, les deux sont supportés sous Linux), il y a une ancienne incantation impliquant tar :

$ tar cf - . | (cd DIR; tar xf - )

Pourquoi diable feriez-vous cela? Parce que tar a une compréhension assez sophistiquée de links hard et symbolic.

Voulez-vous copier pour remplacer les liens symboliques existants par des liens ayant le même texte? Ou avec des liens vers la même cible (ajustement des chemins relatifs pour compenser)? Ou avec des copies au niveau du bit de la cible?

Si deux fichiers de l'original sont liés en dur, la nouvelle structure devrait-elle comporter deux copies des données ou un seul?

Ah, prendre des décisions. Tar a des valeurs par défaut raisonnables, mais vous permet d'être très précis à ce sujet.

10
dmckee

J'aime

cp -axv source dest

Rsync est un autre bon outil pour cela

rsync -va source dest
8
Pete Ashdown