2009-03-11 6 views

Répondre

5

Juste une commande:

touch File{1..99} 
+0

Concis. Je suppose que vous avez voulu le contenu du fichier "test" dans les nouveaux fichiers. –

+1

Vous pouvez utiliser {01..99} pour avoir File01, File02, etc. –

4

Cela dépend du shell que vous utilisez. Je suppose que vous utilisez Bash.

Selon http://www.gnu.org/software/bash/manual/bashref.html#Brace-Expansion, Bash va développer les chiffres et les caractères uniques. Ainsi, l'expression de votre corset doit être:

File{1..99} 

Mais je ne pense pas que l'opérateur de redirection « > » peut produire à plusieurs fichiers. Vous pourriez avoir besoin d'utiliser une boucle:

for output in File{1..99} 
do 
    cat test > $output 
done 

Ou comme une doublure:

for output in File{1..99}; do cat test > $output; done 
+0

J'ai essayé votre commande en tant que doublure sans succès: $ pour la sortie dans le fichier {1..99}; faire; test de chat> sortie $; done –

+0

Je pense que vous avez un point-virgule supplémentaire. Les travaux suivants pour moi: pour la sortie dans le fichier {1..99}; faire un test de chat> $ output; done –

+0

Cela fonctionne avec $ pour la sortie dans le fichier {1..99}; faire un test de chat> $ output; done –

5
$ for i in {1..100}; do touch "File$i"; done 
4

Si vous préférez une version non mise en boucle vous pouvez utiliser tee

cat test | tee File{1..99} > /dev/null 
+0

Votre code fonctionne également sans/dev/null. Pourquoi l'utilisez-vous? –

+0

@Masi: Principalement pour être équivalent avec les autres réponses. Une autre raison possible, bien que n'étant pas la mienne, est d'éviter une longue sortie qui n'est pas nécessaire. – phyrex1an

+0

'tee' copiait sinon la sortie vers le terminal ainsi que les fichiers. –

3

Avec zsh (avec son mult_ios) vous pouvez :)

% zsh -c 'print test > file{1..3}' 
% head file*      
==> file1 <== 
test 

==> file2 <== 
test 

==> file3 <== 
test 
1

Si vous voulez que les fichiers de trier correctement (file01, file02 ... file10, etc.), faites ceci:

for i in {0..10}; do i="0"$i; touch file${i: -2}; done 

qui est le même que:

for i in {0..10} 
do 
    i="0"$i 
    touch file${i: -2} # or cat file > file${i: -2} 
done 

Il doit y avoir un pari spatial Ajoutez le deux-points et le tiret dans la clause d'extension de la sous-chaîne. Vous pouvez démarrer les plages ci-dessus avec 1 si vous voulez commencer par "file01".

Ou, une manière beaucoup plus succincte d'avoir des zéros en tête:

touch file{0..9}{0..9} 

et à utiliser la technique de phyrex1an avec celui-ci:

cat test | tee File{0..9}{0..9} > /dev/null 

Cela ne fait un fichier supplémentaire "de file00". Vous pouvez également faire "{2..3} {0..9}" pour "file20" à "file39", mais en changeant le chiffre des uns (la deuxième plage), certaines parties de la séquence seraient ignorées.

Questions connexes