Copier un répertoire sous Unix

76

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?

Dinesh Kumar
la source
2
"cp -r / dir1 / dir2" Est-ce correct ??
Dinesh Kumar
Oui c'est correct. Vous voudrez peut-être cocher l'une des réponses comme solution.
qroberts

Réponses:

111
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 Soyez prudent lorsque vous utilisez l' -findicateur 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.

qroberts
la source
10
Je ne suis pas d'accord pour que vous utilisiez le fdrapeau. -f if an existing destination file cannot be opened, remove it and try again
Nifle
Personnellement, j'utilise toujours le drapeau -f. Ce n'est pas une bonne pratique, alors vous avez peut-être raison.
qroberts
Si vous savez ce que ça fait, et vous savez ce que vous faites, ça va. Mais dans ce cas, avec un utilisateur inexpérimenté, cela pourrait ne pas être approprié.
Nifle
@ Nifle Ouais, je comprends ce que vous dites. Juste que s'il le force, les chances de le faire fonctionner sont meilleures que s'il ne le faisait pas. Tout dépend de ce que vous faites et de ce que vous comprenez.
Qroberts
Si vous indiquez dans votre réponse que l' -findicateur est utile si vous copiez <source> sur <dest> (comme pour écraser des éléments dans <dest>), je vais lui-même changer de vote et supprimer ma réponse)
Nifle
11

Bien que les cp -Rréponses soient correctes (en passant, le cas du drapeau sur BSD doit être capital, les deux sont supportés sur Linux), il existe 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 des liens à la fois durs et symboliques.

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.

dmckee
la source
9

J'aime

cp -axv source dest

Rsync est un autre bon outil pour cela

rsync -va source dest
Pete Ashdown
la source