11 votes

Comment puis-je créer 1000 fichiers que je peux utiliser pour tester un script?

Je voudrais créer 1000+ fichiers texte avec du texte pour tester un script, comment créer autant de fichiers texte en une seule fois en utilisant un script shell ou Perl. Pourriez-vous m'aider s'il vous plaît ?

2voto

erik Points 356

Il suffit de prendre n'importe quel gros fichier de plus de 1000 octets (pour 1000 fichiers avec du contenu). Il y en a beaucoup sur votre ordinateur. Ensuite, faites (par exemple) :

split -n 1000 /usr/bin/firefox

C'est instantanément rapide.

Ou un fichier plus gros :

split -n 10000 /usr/bin/cat

Cela n'a pris que 0,253 secondes pour créer 10000 fichiers.

Pour 100k fichiers :

split -n 100000 /usr/bin/gcc

Seulement 1,974 secondes pour 100 000 fichiers avec environ 5 octets chacun.

Si vous ne voulez que des fichiers avec du texte, regardez votre répertoire /etc. Créez un million de fichiers texte avec du texte presque aléatoire :

split -n 1000000 /etc/gconf/schemas/gnome-terminal.schemas

20.203 secondes pour 1M fichiers avec environ 2 octets chacun. Si vous divisez ce gros fichier en seulement 10k parties, cela ne prend que 0,220 secondes et chaque fichier contient 256 octets de texte.

1voto

fabrizioM Points 11498

Je ne sais pas en shell ou perl mais en python ça serait:

#!/usr/bin/python

for i in xrange(1000):
    with open('file%0.3d' %i,'w') as fd:
        fd.write('some text')

Je pense que c'est assez clair ce que ça fait.

1voto

Dennis Williamson Points 105818

Vous pouvez utiliser uniquement Bash sans éléments externes et encore être en mesure de mettre des zéros pour que les noms de fichiers soient triés correctement (si nécessaire) :

read -r -d '' text << 'EOF'
Some text for
my files
EOF

for i in {1..1000}
do
    printf -v filename "file%04d" "$i"
    echo "$text" > "$filename"
done

Bash 4 peut le faire de cette façon :

for filename in file{0001..1000}; do echo $text > $filename; done

Les deux versions produisent des noms de fichiers comme "file0001" et "file1000".

0voto

Brad Gilbert Points 12724

Voici un court programme Perl en ligne de commande.

perl -E'say $_ $_ for grep {open $_, ">f$_"} 1..1000'

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