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.
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.
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/
Réponses:
L'option que vous recherchez est
-R
.destination
n'existe pas, il sera créé.-R
signifiecopy directories recursively
. Vous pouvez également utiliser-r
car il est insensible à la casse./
selon le commentaire de @ muni764 .la source
cp -r src/. dest
Je sais que c'est mentionné mais je semble toujours le manquer à chaque fois.Vous recherchez la
cp
commande. 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é
dir1
et que vous souhaitez le copier dans votre/home/Pictures
dossier: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 commandepwd
.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:
à 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.
la source
-r
option de ceci copiera les répertoires récursivement.cp -r
commande, mais qu'il ne fonctionnait pas correctement?-r
,--recursive
et-R
sont équivalents. Cela donnera également des pièges communs, etc. ce qui est bien.cp -r dir1 ~/Pictures/
Utilisation:
la source
demo1_copy
n'existait pas déjà$ ls demo1 demo3 README.md $ cp -R demo1/ demo1_copy/