90 votes

Comment copier un fichier dans plusieurs dossiers en utilisant la ligne de commande ?

J'ai essayé de copier un fichier test.txt à plusieurs répertoires avec une seule commande :

cp ~/test.txt ~/folder1 ~/folder2

Mais je n'ai pas réussi. Existe-t-il un moyen de faire cela en une seule commande afin de pouvoir copier un fichier ou même un dossier dans plusieurs répertoires ?

86voto

Radu Rădeanu Points 156862

cp peut copier à partir de plusieurs sources, mais no puede copier vers plusieurs destinations. Voir man cp pour plus d'informations.

La seule commande bash que je connaisse qui peut copier/enregistrer vers plusieurs destinations est tee .

Vous pouvez l'utiliser dans votre cas comme suit :

tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt

Notez que tee écrit également l'entrée sur la sortie standard (stdout). Donc, si vous ne voulez pas cela, vous pouvez l'empêcher en redirigeant la sortie standard vers /dev/null comme suit :

tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt >/dev/null

72voto

Sylvain Pineau Points 59212

Une autre façon de réaliser une copie vers plusieurs emplacements est la commande suivante :

find dir1 dir2 -exec cp file.txt {} \;

Si dir1 ou dir2 ont des sous-répertoires dans lesquels vous ne voulez pas que le fichier soit copié, ajoutez -maxdepth 0 option :

find dir1 dir2 -maxdepth 0 -exec cp file.txt {} \;

Notez que cela va écraser tous les fichiers dans dir1 y dir2 con file.txt en plus de le copier. Pour copier uniquement file.txt sans affecter les autres fichiers de ces répertoires, dites à find pour n'agir que sur les répertoires :

find dir1 dir2 -type d -exec cp file.txt {} \;

36voto

Rmano Points 30303

La commande

cp ~/test.txt ~/folder1 ~/folder2

essaie de copier deux fichiers ( ~/test.txt~/folder1 ) à la destination folder2 . (Et si ~/folder2 existe et est un répertoire, vous aurez un avertissement "omission de répertoire").

Si vous voulez faire plusieurs copies du fichier test.txt vous devez utiliser une boucle ou des commandes multiples...

for i in ~/folder1 ~/folder2; do cp  ~/test.txt $i; done 

(...et faites attention si vous avez des espaces dans les noms de fichiers, vous aurez besoin de quoting).

Pour copier des répertoires entiers, vous devez utiliser la fonction -r option :

for i in ~/folder1 ~/folder2; do cp -r ~/folder3 $i; done

cela créera ~/folder1/folder3 y ~/folder2/folder3 avec tous les fichiers inclus.

28voto

Evandro Silva Points 8912

Vous pouvez créer une aide script , ou vous pouvez le faire avec xargs et une fonction d'impression (dans ce cas, echo ):

echo firstDir secondDir | xargs -n 1 cp test

Cela fera de chaque répertoire un argument pour la commande cp fonction, en utilisant test en tant que paramètre.

9voto

nux Points 34943

Après une longue recherche, cela fonctionne aussi comme un charme !

for dir in *; do [ -d "$dir" ] && cp /path/file.txt "$dir" ; done

Cela copiera file.txt à chaque répertoire de votre emplacement actuel dans le terminal.

for dir in *; do [ -d "$dir" ] && cp -rf /path/folder "$dir" ; done

Cela copiera un dossier dans chaque sous-répertoire de votre emplacement actuel dans le terminal.

Je le partage en espérant que cela aidera d'autres personnes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X