J'ai trouvé un moyen dans Windows de faire une telle chose
echo "This is just a sample line appended to create a big file. " > dummy.txt
for /L %i in (1,1,21) do type dummy.txt >> dummy.txt
http://www.windows-commandline.com/how-to-create-large-dummy-file/
Existe-t-il un moyen sous UNIX de copier un fichier, de l'ajouter puis de répéter le processus? Quelque chose comme ça for .. cat file1.txt > file1.txt
?
for i in {1..1000000};do echo "string" >> file;done
en bash.type file >> file
à fonctionner dans une boucle infinie (au moins dès qu'il est suffisamment grand pour ne pas tenir dans un tampon).Réponses:
Avec
csh
/tcsh
:Avec
zsh
:Sur les systèmes GNU, voir aussi:
Ou:
(crée un fichier fragmenté de 10 To (très volumineux mais ne prend pas de place sur le disque)) et les autres alternatives décrites dans "Créer un fichier de test avec beaucoup de zéro octet" .
Faire
cat file >> file
serait une mauvaise idée.Tout d'abord, cela ne fonctionne pas avec certaines
cat
implémentations qui refusent de lire des fichiers identiques à leur fichier de sortie. Mais même si vous contournez ce problème en faisantcat file | cat >> file
, s'ilfile
est plus grand quecat
le tampon interne de, cela entraîneraitcat
une exécution dans une boucle infinie car il finirait par lire les données qu'il a écrites plus tôt.Sur les systèmes de fichiers soutenus par un disque dur rotatif, il serait également assez inefficace (après avoir atteint une taille supérieure à celle qui serait éventuellement mise en cache en mémoire) car le lecteur devrait faire des allers-retours entre l'emplacement où lire les données, et que où l'écrire.
la source
dd if=/dev/zero of=large-file bs=1024 count=1024
pour un fichier de 1 Modd if=/dev/zero of=test bs=1M count=1
plus clair.dd
, mais je n'ai jamais compris pourquoi. En fait, je pense que je ne l'ai utilisé que pour lire un MBR ou des tâches marginales similaires. D'après mon expérience, d'autres outils sont plus rapides, plus simples et plus sûrs pour la grande majorité des cas d'utilisationdd
. Je pense que c'est l'un de ces cas où commun! = Optimal, commesudo su
oucat file | grep foo
.Vous pouvez créer un fichier volumineux sur Solaris en utilisant:
Une autre façon qui fonctionne sur Solaris (et Linux):
Il est également possible d'utiliser:
la source
truncate
existe sur Solaris 11.2+Le moyen le plus rapide possible de créer un gros fichier dans un système Linux est
fallocate
:fallocate
manipule le système de fichiers, et n'écrit pas réellement dans les secteurs de données par défaut, et en tant que tel est extrêmement rapide. L'inconvénient est qu'il doit être exécuté en tant que root.En l'exécutant successivement en boucle, vous pouvez remplir le plus grand des systèmes de fichiers en quelques secondes.
De
man fallocate
la source
Cela continuera jusqu'à ce que vous CTRL-C:
yes This is stuff that I want to put into my file... >> dummy.txt
Attention cependant, car vous pouvez obtenir des centaines de milliers de lignes / seconde ...
De
man yes
:la source
yes $BIG_STRING | head -c $TARGET_SIZE >> dummy.txt
vous permettrait d'obtenir un montant précis. (-n $ TARGET_NUMBER_OF_LINES).yes
mourrait automatiquement à la suite d'un «tuyau cassé» à lahead
fin parce que le nombre cible a été atteint.Si je vous comprends bien, vous cherchez quelque chose comme:
Cela va créer un fichier avec 22 répétitions de "ligne de test". Si vous voulez une taille de fichier spécifique, vous pouvez utiliser quelque chose comme ça (sous Linux). 1024 est un kilo-octet:
Personnellement, lorsque je veux créer un fichier volumineux, j'utilise deux fichiers et les catalyse l'un dans l'autre. Vous pouvez répéter le processus jusqu'à atteindre la taille souhaitée (1 Mo ici):
Notez que cette solution dépassera souvent la taille souhaitée car si le fichier est en dessous de la limite, tout y sera à nouveau intégré.
Enfin, si tout ce que vous voulez, c'est un fichier de la taille souhaitée et que vous n'en avez pas besoin pour contenir quoi que ce soit, vous pouvez utiliser
truncate
:la source
cat
fichier a-t-il réellement l'avantage de simplement s'ajouter? Il semblerait que cela prendrait plus de temps car il doit bifurquer deux processus à chaque boucle et également déplacer le contenu entier plusieurs fois.cat
approche est beaucoup, beaucoup plus rapide. Cela n'a de sens que pour créer des fichiers énormes, mais cela a créé un fichier 545M en 10 secondes sur ma machine. La mêmewhile
boucle avececho "test line" >> file
créé un fichier 96K dans le même temps.truncate
autour, vous pouveztruncate -s 1G
créer le fichier en premier lieu. unix.stackexchange.com/a/269184/85549 . Vous pouvez le remplacer par unhead -c $DESIRED_SIZE
, éventuellement dans lawhile
boucle.En canalisant le contenu de
/dev/urandom
to,head
vous pouvez rediriger la sortie vers un fichier, donc:Vous donnera un fichier avec 100 octets de déchets.
la source
même effet de votre script windows mais en bash, vous ne pouvez pas concaténer directement un fichier.
la source
.txt
extension, vous laissez 2 gros fichiers à la fin.