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

59

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

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

Mais je n'ai pas réussi. Est-il possible de le faire en une seule commande afin que je puisse copier un fichier ou même un dossier dans plusieurs répertoires?

    
posée nux 11.03.2014 - 17:11
la source

7 réponses

65

cp peut copier depuis plusieurs sources, mais ne peut pas copier vers plusieurs destinations. Voir man cp pour plus d'informations.

La seule commande bash que je connaisse qui puisse copier / enregistrer sur 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 dans la sortie standard (stdout). Donc, si vous ne le voulez pas, 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
    
réponse donnée Radu Rădeanu 11.03.2014 - 18:01
la source
54

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 souhaitez pas que le fichier soit copié, ajoutez Option -maxdepth 0 :

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

Notez que cela écrasera chaque fichier dans dir1 et dir2 avec le contenu de file.txt , en plus de le copier. Pour ne copier que file.txt sans affecter les autres fichiers de ces répertoires, indiquez à find d’agir uniquement sur les répertoires:

find dir1 dir2 -type d -exec cp file.txt {} \;
    
réponse donnée Sylvain Pineau 11.03.2014 - 17:31
la source
30

La commande

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

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

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

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

(... et soyez prudent si vous avez des espaces incorporés dans les noms de fichiers, vous aurez besoin de citer).

Pour copier des répertoires entiers, vous devez utiliser l’option -r :

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

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

    
réponse donnée Rmano 11.03.2014 - 17:25
la source
23

Vous pouvez créer un script d’aide 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 de la fonction cp , en utilisant le fichier test comme paramètre.

    
réponse donnée Evandro Silva 11.03.2014 - 17:28
la source
6

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 fichier.txt dans chaque répertoire de votre emplacement actuel dans le terminal.

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

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

Je partage son espoir d’aider les autres aussi.

    
réponse donnée nux 12.03.2014 - 01:06
la source
1

Si vous souhaitez copier le fichier test.txt dans chaque répertoire de / tmp / target / ...

créer un environnement de test:

mkdir /tmp/target
cd /tmp/target
mkdir -v {folder1,folder2,folder3}
touch test.txt

le copier:

find * -maxdepth 0 -type d -exec cp -vi test.txt {} \;
    
réponse donnée matt 29.06.2015 - 16:26
la source
0

Juste pensé pour donner une variation à la réponse de Sylvain Pineau

dir1 et dir2 ne sont pas dans votre répertoire actuel.

find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;

ici find recherchera dir1 deux niveaux de profondeur ou vous pouvez omettre le paramètre -maxdepth pour trouver dir1 dans tous les dossiers du répertoire actuel et au-dessous.

    
réponse donnée Joshi 07.10.2017 - 20:42
la source

Lire d'autres questions sur les étiquettes