¿Cómo crear un archivo desde la terminal repitiendo un conjunto de palabras infinitamente? Lo necesito para crear un archivo enorme con fines de análisis como 2-4GB de tamaño. Actualmente estoy copiando manualmente líneas de pegado en el mismo archivo para aumentar el tamaño.
command-line
Nisheet
fuente
fuente
mkfifo huge.tmp; while true; do yes "a dummy line" > huge.tmp; done
?Respuestas:
Hay una manera fácil de repetir una línea muchas veces:
dará como resultado out.txt que contiene 10,000 líneas que dicen "no tenemos plátanos".
Para limitar la salida a un número exacto de bytes, use
head
la-c
opción 's en lugar de-n
. Por ejemplo, esto genera exactamente 10 kB de texto:fuente
head -c 10000
para 10 kB en lugar dehead -n 10000
para 10k líneas.No puedo recomendar el texto que se repite infinitamente , pero podría hacer un archivo de ~ 2GB de texto repetido con Python así ...
Eso imprimirá "hola mundo" 10 veces y hará una nueva línea, y repita eso 20,000,000 veces, escribiendo el resultado en el archivo
bigfile
. Si todos sus caracteres son ASCII, cada uno es un byte, así que calcule adecuadamente según lo que quiera escribir ...Su CPU puede ser de su propiedad. Me quedo sin RAM si intento hacer más de 10,000,000 de líneas ...
Aunque estoy corriendo una tostadora
fuente
Perl tiene el ingenioso
x
operador:Entonces, como una solución simple, podría escribir su línea unos pocos millones de veces. Por ejemplo, este comando creó un archivo 3G:
Si necesita especificar un tamaño exacto (2 GiB en este caso), puede hacer:
fuente
Ponga el conjunto de palabras que se repetirán en un archivo, por ejemplo
source.txt
. Obtenga el tamaño desource.txt
, en bytes, por ejemplo, por:Decida el tamaño del archivo de destino, por ejemplo
destination.txt
, 2 GB o 4 GB o lo que sea. Convierte el tamaño en bytes.Divida el tamaño del archivo de destino por el tamaño del archivo de origen.
bash
no puede hacer aritmética de coma flotante, pero no es necesaria en este caso.Use una
for
construcción para repetir unacat source.txt
operación el resultado de la división veces. Esta sería la aproximación más cercana al tamaño del archivo de destino que puede obtener por repetición. La salida de la operación se guarda endestination.txt
.Por ejemplo, suponiendo que
source.txt
es de 30 bytes, y queremos crear un archivo de 2 GB, necesitamos:Aquí estoy estableciendo el límite superior
((16777216/30))
en el momento de la inicialización; puedes obtener el resultado y ponerlo aquí también.La operación llevaría algún tiempo; cuanto mayor sea
source.txt
, menos tiempo se necesitará.fuente
destination.txt
una vez por cada iteración del ciclo?También puedes usar un
while
bucle.Ejemplo: Contenido de
foo.txt
(Esta es su fuente):bar.txt
está vacío (este es su archivo de destino). Ahora puede ejecutar el siguiente ciclo para escribir el contenido defoo.txt
varias vecesbar.txt
:Explicación:
stat --format "%s" bar.txt
muestra el tamaño debar.txt
en bytes.while [ $(stat --format "%s" bar.txt) -lt 150 ]
Las siguientes acciones se repetirán hasta que se alcance el tamaño de destino (en este caso 150 bytes).cat foo.txt >> bar.txt
agregar el contenido defoo.txt
abar.txt
fuente
primero de disparar el comando:
creará un archivo en la ruta de tamaño bs * contar bytes aleatorios, en nuestro caso 2048 * 10 = 20Kb. eso se puede cambiar según el requisito.
Este comando redirige STDIN a un archivo, por lo que deberá ingresar dos líneas y luego presionar Ctrl + D. Luego deberá ejecutar el siguiente comando:
Donde n es un número entero. Esto creará un archivo con 2 ^ (n + 1) líneas, duplicando las dos líneas originales. Entonces, para crear un archivo con 16 líneas, haría:
Aquí hay algunos números más para comenzar:
fuente
Los FIFO son probablemente lo que estás buscando. En lugar de llamar a su programa con un archivo determinado, puede vincular el resultado de un comando de shell a través de la subtitulación del proceso y el programa verá su salida como un archivo de texto sin formato. La ventaja aquí es que ya no está limitado por su espacio en el disco, por lo que puede alcanzar tamaños de archivo que de otra forma serían imposibles, siempre y cuando su programa no necesite almacenar primero el archivo completo y simplemente analizarlo línea por línea. Por ejemplo, usando la respuesta de @hobbs para generar contenido:
Esto me presta un archivo de 95 gigabytes (de acuerdo con wc) sin costo en el espacio del disco duro y apenas RAM, solo lo suficiente para almacenar lo que devuelve el comando antes de que se lea. Esto es lo más cercano a "infinitamente" que vas a tener.
fuente