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?
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
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.
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:
for FILE in "file2" "file3"; do cp file1 $FILE; done
cat file1 | tee file2 | tee file3 | tee file4 | tee file5 >/dev/null
Vous pouvez utiliser shift
:
file=$1
shift
for dest in "$@" ; do
cp -r $file $dest
done
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.
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}';'
Vous pouvez utiliser des commandes de script standard pour cela à la place:
Frapper:
for i in file2 file3 ; do cp file1 $i ; done