Encontré una manera en Windows para hacer tal cosa
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/
¿Hay alguna manera en UNIX para copiar un archivo, agregarlo y luego repetir el proceso? Algo como for .. cat file1.txt > file1.txt
?
for i in {1..1000000};do echo "string" >> file;done
en fiestatype file >> file
correr en un bucle infinito (al menos tan pronto como sea lo suficientemente grande como para que no quepa en un búfer).Respuestas:
Con
csh
/tcsh
:Con
zsh
:En sistemas GNU, vea también:
O:
(crea un archivo disperso de 10TiB (muy grande pero no ocupa espacio en el disco)) y las otras alternativas discutidas en "Crear un archivo de prueba con muchos cero bytes" .
Hacerlo
cat file >> file
sería una mala idea.Primero, no funciona con algunas
cat
implementaciones que se niegan a leer archivos que son iguales a su archivo de salida. Pero incluso si lo soluciona haciendocat file | cat >> file
, sifile
es más grande quecat
el búfer interno, eso haría que secat
ejecutara en un bucle infinito, ya que terminaría leyendo los datos que ha escrito anteriormente.En los sistemas de archivos respaldados por un disco duro giratorio, también sería bastante ineficiente (después de alcanzar un tamaño mayor que el que posiblemente se almacenaría en la memoria caché) ya que el disco necesitaría ir y venir entre la ubicación donde leer los datos, y que donde escribirlo.
fuente
dd if=/dev/zero of=large-file bs=1024 count=1024
para un archivo de 1 MBdd if=/dev/zero of=test bs=1M count=1
más claro.dd
, pero nunca he entendido por qué. De hecho, creo que solo lo he usado para leer un MBR o tareas similares. En mi experiencia, otras herramientas son más rápidas, más simples y más seguras para la gran mayoría de los casos en que las personas usandd
. Creo que este es uno de esos casos donde común! = Óptimo, comosudo su
ocat file | grep foo
.Puede crear un archivo grande en Solaris usando:
Otra forma que funciona en Solaris (y Linux):
También es posible usar:
fuente
truncate
existe en Solaris 11.2+La forma más rápida posible de crear un archivo grande en un sistema Linux es
fallocate
:fallocate
manipula el sistema de archivos y, en realidad, no escribe en los sectores de datos de manera predeterminada, y como tal es extremadamente rápido. La desventaja es que debe ejecutarse como root.Ejecutándolo sucesivamente en un bucle, puede llenar el mayor de los sistemas de archivos en cuestión de segundos.
Desde
man fallocate
fuente
Esto continuará hasta que CTRL-C:
yes This is stuff that I want to put into my file... >> dummy.txt
Sin embargo, tenga cuidado, porque puede obtener cientos de miles de líneas / segundo ...
De
man yes
:fuente
yes $BIG_STRING | head -c $TARGET_SIZE >> dummy.txt
te dejaría obtener una cantidad precisa. (-n $ TARGET_NUMBER_OF_LINES).yes
moriría automáticamente como resultado de una 'tubería rota' cuandohead
termina porque se ha alcanzado el número objetivo.Si te entiendo correctamente, estás buscando algo como:
Eso creará un archivo con 22 repeticiones de "línea de prueba". Si desea un tamaño de archivo específico, puede usar algo como esto (en Linux). 1024 es un kilobyte:
Personalmente, cuando quiero crear un archivo grande, utilizo dos archivos y cat uno en el otro. Puede repetir el proceso hasta alcanzar el tamaño deseado (1 MB aquí):
Tenga en cuenta que esta solución a menudo excederá el tamaño deseado porque si el archivo está por debajo del límite, todo se incluirá nuevamente.
Finalmente, si todo lo que desea es un archivo del tamaño deseado y no necesita que contenga nada, puede usar
truncate
:fuente
cat
embargo, ¿ el archivo tiene alguna ventaja para agregarlo? Parecería que llevaría más tiempo ya que tiene que bifurcar dos procesos en cada ciclo y también mover todo el contenido varias veces.cat
enfoque es mucho, mucho más rápido. Solo tiene sentido crear archivos enormes, pero eso creó un archivo de 545M en 10 segundos en mi máquina. El mismowhile
bucle conecho "test line" >> file
creó un archivo de 96K en la misma cantidad de tiempo.truncate
alrededor, puedetruncate -s 1G
crear el archivo en primer lugar. unix.stackexchange.com/a/269184/85549 . Puede reemplazarlo por unhead -c $DESIRED_SIZE
, posiblemente dentro delwhile
bucle.Al canalizar el contenido de
/dev/urandom
ahead
, puede redirigir la salida a un archivo, de modo que:Le dará un archivo con 100 bytes de basura.
fuente
mismo efecto de su script de Windows pero en bash, no puede concatenar un archivo consigo mismo, directamente.
fuente
.txt
extensión, dejarás 2 archivos grandes al final.