Comment copier un dossier contenant des fichiers dans un autre dossier sous Unix / Linux? [fermé]

1192

J'ai des problèmes pour copier un dossier avec des fichiers dans ce dossier dans un autre dossier. La commande cp -rne copie pas les fichiers du dossier.

user2080656
la source
Je souhaite que cela puisse être migré vers une SE où c'est plus sur le sujet.
jrh
6
La programmation Bash est sur le sujet .
xskxzr

Réponses:

1980

L'option que vous recherchez est -R.

cp -R path_to_source path_to_destination/
  • S'il destinationn'existe pas, il sera créé.
  • -Rsignifie copy directories recursively. Vous pouvez également utiliser -rcar il est insensible à la casse.
  • Notez les nuances avec l'ajout de la fin /selon le commentaire de @ muni764 .
Pierre Salagnac
la source
5
Je me demande pourquoi cette commande exacte dans dockerfile copie tous les fichiers du répertoire source dans la destination, au lieu de copier uniquement le répertoire entier.
holms
4
Je crois que le «/» à la fin fait une différence et cela pourrait expliquer votre expérience. Si la source inclut la barre oblique finale, elle copiera uniquement ce qui se trouve dans le répertoire. S'il n'inclut pas la barre oblique de fin, il copiera également le répertoire, puis le contenu qu'il contient. Ma mémoire est que ce comportement varie selon la commande et peut-être un événement par OS un peu. Voici une référence avec plus d'informations.
OllieBrown
23
Je dirais que si vous ne voulez pas inclure la source et que vous voulez vous assurer que tout est copié (liens symboliques, fichiers cachés) sans copier le dossier parent source, utilisez -ra source /. destination. Cela garantira que le contenu du dossier est copié, mais pas le dossier parent lui-même, ce qui est parfois pratique. Et la différence est le /.
muni764
Cela semble également fonctionner correctement si les répertoires à copier sont des liens symboliques, ce qui était mon cas d'utilisation.
Gdalya
3
Notez l'importance de "Slash dot" sur votre source dans cp -r src/. destJe sais que c'est mentionné mais je semble toujours le manquer à chaque fois.
bbeecher
368

Vous recherchez la cpcommande. Vous devez modifier les répertoires afin de vous trouver en dehors du répertoire que vous essayez de copier.

Si le répertoire que vous copiez est appelé dir1et que vous souhaitez le copier dans votre /home/Picturesdossier:

cp -r dir1/ ~/Pictures/

Linux est sensible à la casse et a également besoin /de chaque répertoire pour savoir qu'il ne s'agit pas d'un fichier. ~est un caractère spécial du terminal qui est automatiquement évalué dans le répertoire personnel de l'utilisateur actuel. Si vous avez besoin de savoir dans quel répertoire vous vous trouvez, utilisez la commande pwd.

Lorsque vous ne savez pas comment utiliser une commande Linux, il existe une page de manuel à laquelle vous pouvez vous référer en tapant:

man [insert command here]

à une invite de terminal.

De plus, pour compléter automatiquement les longs chemins de fichier lors de la saisie dans le terminal, vous pouvez frapper Tabaprès avoir commencé à taper le chemin et vous aurez soit le choix, soit il insérera la partie restante du chemin.

Alex W
la source
6
Pour clarifier davantage, l' -roption de ceci copiera les répertoires récursivement.
TVann
5
Est-ce que l'OP ne précise pas qu'il a l' aide de la cp -rcommande, mais qu'il ne fonctionnait pas correctement?
MD XF
4
La raison pour laquelle j'ai inclus les informations sur les pages de manuel est que ces indicateurs peuvent dépendre de la distribution. Cependant, pour la plupart, il semble -r, --recursiveet -Rsont équivalents. Cela donnera également des pièges communs, etc. ce qui est bien.
Alex W
6
Si vous souhaitez copier de manière portative le RÉPERTOIRE et pas seulement son contenu, laissez le tiret de fin dans le dossier source, c'est-à-dire. cp -r dir1 ~/Pictures/
mehtunguh
105

Utilisation:

$ cp -R SRCFOLDER DESTFOLDER/
cIph3r
la source
4
c'est la façon dont je l'ai fait et qui demo1_copyn'existait pas déjà$ ls demo1 demo3 README.md $ cp -R demo1/ demo1_copy/
HattrickNZ