¿Cómo puedo crear un archivo (por ejemplo, usando el touchcomando 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
truncateposible 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 usarddo en suheadlugar.fuente
touchembargo, no es necesario, simplemente puede ejecutarlotruncate -s 14M filenamey crearáfilenamedirectamente.EDITAR: La forma más simple es probablemente la respuesta
truncatede 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
\0s: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*1000si lo desea14*1024*1024, reemplazarMBconM. Por ejemplo:fallocatesolo ofertas en bytes, por lo que tendría que hacer (14 * 1024 * 1024 = 14680064)fuente
ddsi existe un enfoque más simple y menos potencialmente destructivo.ddsolución tiene una alternativa no dd.ddcomando en la página wiki es completamente diferente y no se usa/dev/zero. En cuanto a siMoMBes 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
ddsobrescribirá 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
ddes la forma portátil de hacerlo, los comandosmkfileyxfs_mkfileestá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
-nopción de crear archivos dispersos en su lugar.fuente
Hay otra opción con Perl:
perl -e 'print "a" x 1024' > file.txtEsto creará un archivo de 1 KB. Reemplace 1024 con cualquier número que desee.
fuente