45 votes

Commandes Linux pour copier un fichier vers plusieurs fichiers

Existe-t-il une commande/script en une ligne pour copier un fichier vers plusieurs 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 les autres ?

2voto

Isaiah Taylor Points 85

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

1voto

Thomas Points 1971

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

cat file > firstCopy > secondCopy > thirdCopy

o

cat file > {1..100} - pour les noms de fichiers avec des chiffres.

C'est bon pour les petits fichiers.

Vous devriez utiliser le cp script mentionné précédemment pour les fichiers plus importants.

0voto

knittl Points 64110

La solution la plus simple et la plus rapide à laquelle je pense est une boucle for :

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

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

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

0voto

Wes Hardaker Points 10426

Vous pouvez utiliser des commandes de script standard pour cela :

Bash :

 for i in file2 file3 ; do cp file1 $i ; done

0voto

l3x Points 434

Je recommanderais de créer un script d'usage général et une fonction ( fichiers vides ), basé sur le script, pour vider un nombre quelconque de fichiers cibles.

Nommez le script. copier d'un à plusieurs et mettez-le dans votre PATH.

#!/bin/bash -e
#  _ _____     
# | |___ /_  __  
# | | |_ \ \/ /  Lex Sheehan (l3x)
# | |___) >  <   https://github.com/l3x
# |_|____/_/\_\  
#
# Copy the contents of one file to many other files.

source=$1
shift
for dest in "$@"; do
    cp $source $dest
done

exit

NOTES

El shift ci-dessus supprime le premier élément (le chemin du fichier source) de la liste d'arguments ( "$@" ).

Exemples de comment vider de nombreux fichiers :

Créez un fichier1, un fichier2, un fichier3, un fichier4 et un fichier5 avec du contenu :

for f in file{1..5}; do echo $f > "$f"; done

Vider de nombreux fichiers :

copy-from-one-to-many /dev/null file1 file2 file3 file4 file5

Vider de nombreux fichiers plus facilement :

# Create files with content again
for f in file{1..5}; do echo $f > "$f"; done 

copy-from-one-to-many /dev/null file{1..5}

Créer une fonction empty_files basée sur copy-from-one-to-many

function empty-files()
{
    copy-from-one-to-many /dev/null "$@"
}

Exemple d'utilisation

# Create files with content again
for f in file{1..5}; do echo $f > "$f"; done 
# Show contents of one of the files
echo -e "file3:\n $(cat file3)"

empty_files file{1..5}
# Show that the selected file no longer has contents
echo -e "file3:\n $(cat file3)"

Ne vole pas seulement le code. Améliorez-le, documentez-le avec des exemples et partagez-le. - l3x

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X