¿Cómo puedo crear un archivo (por ejemplo, usando el touch
comando u otra forma similar), pero con un tamaño específico (por ejemplo, 14 MB)?
El caso de uso es probar FTP con varios tamaños de archivo. Si podemos crear un archivo con un tamaño específico, será útil verificar la transferencia FTP, etc.
linux
command-line
fasil
fuente
fuente
Respuestas:
Uso
truncate
:De
man truncate
:Nota: es
truncate
posible que no esté disponible en su sistema, por ejemplo, en Mac OS X no está instalado de manera predeterminada (pero puede instalarlo fácilmente, por ejemplo, utilizando macports). En estos casos, es posible que necesite usardd
o en suhead
lugar.fuente
touch
embargo, no es necesario, simplemente puede ejecutarlotruncate -s 14M filename
y crearáfilename
directamente.EDITAR: La forma más simple es probablemente la respuesta
truncate
de Ashutosh Vishwa Bandhu , pero como lo señaló @ offby1 que crea archivos dispersos que pueden no ser lo que desea. Las siguientes soluciones crean archivos normales y completos.Los siguientes comandos crean un archivo de 14MB llamado
foo
:fallocate
(Gracias a @Breakthrough que lo sugirió en los comentarios y vota la respuesta de Ahmed Masud a continuación, que también lo menciona).Este comando es particularmente impresionante ya que es tan rápido como
truncate
(instantáneo) independientemente del tamaño de archivo deseado (a diferencia de las otras soluciones que serán lentas para archivos grandes) y, sin embargo, crea archivos normales, no dispersos:Crea un archivo lleno de datos aleatorios
o
Crea un archivo lleno de
\0
s:o
Cree un archivo lleno con los primeros 14 MB de datos de otro archivo:
Cree un archivo lleno con los últimos 14 MB de datos de otro archivo:
En todos los ejemplos anteriores, el archivo será,
14*1000*1000
si lo desea14*1024*1024
, reemplazarMB
conM
. Por ejemplo:fallocate
solo ofertas en bytes, por lo que tendría que hacer (14 * 1024 * 1024 = 14680064)fuente
dd
si existe un enfoque más simple y menos potencialmente destructivo.dd
solución tiene una alternativa no dd.dd
comando en la página wiki es completamente diferente y no se usa/dev/zero
. En cuanto a siM
oMB
es más lógico, tomar con los desarrolladores. Las páginas de manual de head , tail y dd indican claramente que "MB = 1000 * 1000, M = 1024 * 1024". Esto puede ser diferente en otros * nixes.ADVERTENCIA
dd
sobrescribirá en silencio todo lo que tiene derecho a escribir, si lo especifica de forma voluntaria o accidental. Asegúrese de entenderdd
, por ejemplo. con la lecturadd --help
, y no arruinas tus líneas de comando dd o de lo contrario puedes crear fácilmente una pérdida de datos irreversible, incluso total .Para empezar,
if=
es el archivo de entrada yof=
es el archivo de salida . Siempre verifique que haya acertado antes de ejecutar el comando. :)fuente
Use magic
dd
;) página de manualcausa 14 MB * 1024 = 14336 KB, o:
Y obtendrá un archivo output.dat de 14mb, lleno de ceros: D
fuente
Esta debería ser la forma más rápida de hacerlo:
De lo contrario, simplemente escriba un programa C o perl rápido y sucio que busque la posición exacta y escriba un solo byte. Esto es MUCHO más rápido que descargar datos en los bloques.
Si se quiere evitar archivos dispersos a continuación en Linux (y posiblemente otros sistemas) puede utilizar
fallocate -l <length>
a partirutil-linux
.Si eso no está disponible, y tiene un sistema compatible con POSIX, puede escribir un programa rápido y sucio utilizando la llamada a la biblioteca posix_fallocate (). posix_fallocate garantiza la asignación del rango especificado, por lo que no obtendrá un disco lleno en el uso posterior del rango si regresa con éxito
fuente
Si bien
dd
es la forma portátil de hacerlo, los comandosmkfile
yxfs_mkfile
están escritos específicamente para este propósito y son más rápidos:El problema es que ninguno de los comandos está disponible universalmente, por lo que no son buenos para escribir scripts portátiles. Sin embargo, si lo estoy haciendo interactivamente a través de la línea de comandos, esos son los comandos que uso.
De manera predeterminada, crean archivos con relleno cero y no archivos dispersos (o "holey") . Ambos toman la
-n
opción de crear archivos dispersos en su lugar.fuente
Hay otra opción con Perl:
perl -e 'print "a" x 1024' > file.txt
Esto creará un archivo de 1 KB. Reemplace 1024 con cualquier número que desee.
fuente