Impossibile creare una serie di file fittizi
Domanda
Devo creare file chiamati da File1, File2, ... a File99.
Ho provato quanto segue senza successo
cat test > {File1 .. File99}
Il comando senza la parola File non ha funzionato.
Soluzione
Solo un comando:
touch File{1..99}
Altri suggerimenti
$ for i in {1..100}; do touch "File$i"; done
Questo dipenderà dalla shell che stai usando. Presumo che tu stia usando Bash.
Secondo http://www.gnu.org /software/bash/manual/bashref.html#Brace-Expansion , Bash espande cifre e caratteri singoli. Quindi la tua espressione di parentesi graffa dovrebbe essere:
File{1..99}
Ma non credo che l'operatore di reindirizzamento " > " può essere emesso su più file. Potrebbe essere necessario utilizzare un ciclo:
for output in File{1..99}
do
cat test > $output
done
O come linea singola:
for output in File{1..99}; do cat test > $output; done
Se preferisci una versione non in loop, puoi usare tee
cat test | tee File{1..99} > /dev/null
Con zsh (con le sue mult_ios ) puoi :)
% zsh -c 'print test > file{1..3}'
% head file*
==> file1 <==
test
==> file2 <==
test
==> file3 <==
test
Se si desidera che i file vengano ordinati correttamente (file01, file02 ... file10, ecc.), procedere come segue:
for i in {0..10}; do i="0"$i; touch file${i: -2}; done
Che è lo stesso di:
for i in {0..10}
do
i="0"$i
touch file${i: -2} # or cat file > file${i: -2}
done
Ci deve essere uno spazio tra i due punti e il trattino nella clausola di espansione della sottostringa. Puoi iniziare gli intervalli sopra con 1 se vuoi iniziare con " file01 " ;.
O, un modo molto più conciso di avere zeri iniziali:
touch file{0..9}{0..9}
e per usare la tecnica di phyrex1an con questa:
cat test | tee File{0..9}{0..9} > /dev/null
Questo rende un file extra " file00 " ;. Puoi anche fare " {2..3} {0..9} " per " file20 " tramite "file39", ma la modifica di una cifra (il secondo intervallo) comporterebbe il salto di parti della sequenza.