web-dev-qa-db-fra.com

Copier les fichiers d'un répertoire dans un répertoire existant

En bash je dois faire ceci:

  1. prendre tous les fichiers dans un répertoire

  2. copiez-les dans un répertoire existant

Comment puis-je faire cela? J'ai essayé cp -r t1 t2 (t1 et t2 sont des répertoires existants, t1 contient des fichiers) mais il a créé un répertoire appelé t1 dans t2, je ne veux pas cela, j'ai besoin des fichiers dans t1 pour aller directement dans t2. . Comment puis-je faire cela?

216
David Chang

Ce que tu veux c'est:

cp -R t1/. t2/

Le point à la fin lui indique de copier le contenu du répertoire en cours, pas le répertoire lui-même. Cette méthode inclut également les fichiers et dossiers cachés.

352
Nick

Si vous voulez copier quelque chose d'un répertoire dans le répertoire actuel, procédez comme suit:

cp dir1/* .

Cela suppose que vous n'essayez pas de copier des fichiers cachés.

32
Karl Giesing
cp dir1/* dir2

Ou si vous avez des répertoires à l'intérieur de dir1 que vous voudriez également copier

cp -r dir1/* dir2
28
Bertrand Marron

En supposant que t1 soit le dossier contenant les fichiers et t2 le répertoire vide. Ce que vous voulez, c'est quelque chose comme ça:

Sudo cp -R t1/* t2/

Gardez à l'esprit que, pour le premier exemple, t1 et t2 doivent être des chemins complets ou des chemins relatifs (en fonction de l'endroit où vous vous trouvez). Si vous le souhaitez, vous pouvez naviguer vers le dossier vide (t2) et procéder ainsi:

Sudo cp -R t1/* ./

Ou vous pouvez naviguer dans le dossier avec les fichiers (t1) et faire ceci:

Sudo cp -R ./* t2/

Remarque: le signe * (ou caractère générique) représente tous les fichiers et dossiers. Le drapeau -R signifie récursivement (tout à l'intérieur de tout).

8
Konkret
cp -R t1/ t2

La barre oblique de fin sur le répertoire source modifie légèrement la sémantique, de sorte qu'elle copie le contenu mais pas le répertoire lui-même. Cela évite également les problèmes de fichiers globulants et invisibles de la réponse de Bertrand (copier t1/* manque les fichiers invisibles, copier 't1/* t1 /.*' copie t1 /. Et t1/.., ce que vous ne faites pas. vouloir).

3
Gordon Davisson

En fonction de certains détails, vous pourriez avoir besoin de faire quelque chose comme ceci:

r=$(pwd)
case "$TARG" in
    /*) p=$r;;
    *) p="";;
    esac
cd "$SRC" && cp -r . "$p/$TARG"
cd "$r"

... cela change fondamentalement le répertoire SRC et le copie dans la cible, puis revient à votre point de départ.

La difficulté supplémentaire est de gérer des objectifs relatifs ou absolus.

(Cela ne repose pas sur la sémantique subtile de la commande cp elle-même ... sur la façon dont elle traite les spécifications de source avec ou sans un// final, car je ne suis pas sûr qu'elles soient stables, portables et fiables. au-delà de GNU cp et je ne sais pas s'ils le resteront à l'avenir).

2
Jim Dennis

Pour certains répertoires, ce sera plein car il copiera tout le contenu de "folder1" dans le nouveau répertoire "folder2" à l'intérieur de certains répertoires.

$ (pwd) obtiendra le chemin du répertoire courant.

Notez le point (.) Après folder1 pour obtenir tout le contenu de folder1

cp -r $(pwd)/folder1/. $(pwd)/folder2
0
ashish Kumar