web-dev-qa-db-fra.com

Commandes Linux pour copier un fichier dans plusieurs fichiers

Existe-t-il une commande/script sur une ligne pour copier un fichier dans de nombreux fichiers sous Linux?

cp file1 file2 file3

copie les deux premiers fichiers dans le troisième. Existe-t-il un moyen de copier le premier fichier dans le reste?

36
user121196

Est-ce que

cp file1 file2 ; cp file1 file3

compter comme une "commande/script sur une ligne"? Que diriez-vous

for file in file2 file3 ; do cp file1 "$file" ; done

?

Ou, pour un sens un peu plus lâche de "copie":

tee <file1 file2 file3 >/dev/null
62
ruakh

juste pour le plaisir, si vous avez besoin d'une grande liste de fichiers:

tee <sourcefile.jpg targetfiles{01-50}.jpg >/dev/null- Kelvin 12 février à 19h52

Mais il y a une petite faute de frappe. Devrait être:

tee <sourcefile.jpg targetfiles{01..50}.jpg >/dev/null

Et comme mentionné ci-dessus, cela ne copie pas les autorisations.

4
Yevgen

Vous pouvez améliorer/simplifier l'approche for (répondue par @ruakh) de la copie en utilisant les plages de expansion de l'accolade bash :

for f in file{1..10}; do cp file $f; done

Ceci copie file dans file1, file2, ..., file10.

Ressource à vérifier:

3
Lirt
for FILE in "file2" "file3"; do cp file1 $FILE; done
3
Matt

cat file1 | tee file2 | tee file3 | tee file4 | tee file5 >/dev/null

2
Isaiah Taylor

Vous pouvez utiliser shift:

file=$1
shift
for dest in "$@" ; do
    cp -r $file $dest
done
1
user1247790

Utilisez quelque chose comme ce qui suit. Cela fonctionne sur zsh.

fichier cat> firstCopy> secondCopy> thirdCopy

ou

fichier cat> {1..100} - pour les noms de fichiers avec des nombres.

C'est bon pour les petits fichiers.

Vous devez utiliser le script cp mentionné précédemment pour les fichiers plus volumineux.

0
fane89

La solution la plus simple/la plus rapide à laquelle je peux penser est une boucle for:

for target in file2 file3 do; cp file1 "$target"; done

Un hack sale serait le suivant (je le déconseille fortement, et ne fonctionne que dans bash de toute façon):

eval 'cp file1 '{file2,file3}';'
0
knittl

Vous pouvez utiliser des commandes de script standard pour cela à la place:

Frapper:

 for i in file2 file3 ; do cp file1 $i ; done
0
Wes Hardaker