
¿Existe alguna manera de aumentar fácil y arbitrariamente el tamaño de bytes de un archivo sin dañar su contenido? Por ejemplo, insertando bytes ficticios. El archivo para mi caso de uso es de tipo png.
Estoy en OS X, pero todas las soluciones son bienvenidas.
Respuesta1
La respuesta literal a tu pregunta es no, por definición. El tamaño de un archivo es la longitud de su contenido. Si desea cambiar el tamaño, deberá cambiar el contenido.
Sin embargo, es posible cambiar el contenido y obtenercontenido equivalenteque tiene diferente tamaño. Si esto es posible depende del formato del archivo y de lo que considere equivalente.
Por ejemplo, si el archivo es una imagen PNG y considera que dos archivos que contienen imágenes PNG son equivalentes si las imágenes mostradas son las mismas, puede agrandar el archivo agregando (o alargando) el campo de comentario en el archivo. Por ejemplo conImagenMagia:
convert old.png -comment 'This comment will be added to the image file, making it larger' new.png
El tamaño máximo de comentario portátil es2GB(Es posible que puedas subir hasta 4 GB). En principio puedes poner varios comentarios (o usar otros nombres de campo) pero no sé si los programas comunes lo soportan bien.
Siguiendo con el ejemplo de una imagen PNG, muchos programas aceptan archivos que contienen una imagen PNG válida más contenido adicional como si fuera solo la imagen PNG sin este contenido adicional. Muchos programas seguirán aceptando la imagen si añades basura al final:
cp old.png new.png
echo 'trailing garbage' >>new.png
Puedeusa el truncate
comandopara agregar fácilmente bytes nulos para alcanzar un tamaño determinado. Sólo tenga en cuenta que el archivo resultante es ampliamente aceptado, pero técnicamente no es válido, por lo que es posible que no se acepte en todas partes. (Parece funcionar en todos los programas que utilizanlibpngo un derivado, y esta biblioteca está muy extendida, por lo que es muy probable que el archivo funcione).
Respuesta2
El truncate
comando tiene una opción poco conocida para aumentar el tamaño de los archivos agregando bytes nulos, que no serán visibles en el contenido a menos que estés usando un editor que los muestre explícitamente, como vim
.
Se explica la sintaxis adecuada.en la página de manual, pero en general, pase la -s
opción y proporcione el tamaño que desea que tenga el archivo -s 10k
o agregue un '+' para -s +10k
agregar esa cantidad de bytes nulos al archivo.
Los bytes agregados se insertarán al final. Para su caso de uso, estos valores nulos no serán visibles en la imagen cuando se vea normalmente.
Respuesta3
Dependiendo de su propósito, puede crear unarchivo escaso. Por ejemplo...
dd of=sparse bs=5M seek=1 count=0
Esto crea un archivo que parece tener un tamaño de 5 megabytes, pero no ocupa espacio en el disco. Cuando se lea, el "espacio adicional" aparecerá como nulo.
Puedes hacer que un archivo existente sea disperso con truncate -s
. Por ejemplo, hice que este GIF animado pareciera tener un tamaño de 5 megabytes, pero solo ocupa 102 kilobytes en el disco.
$ ls -l pikachu-nyan.gif
-rw-r--r-- 1 schwern staff 100872 Oct 29 2019 pikachu-nyan.gif
$ truncate -s 5M pikachu-nyan.gif
$ ls -l pikachu-nyan.gif
-rw-r--r-- 1 schwern staff 5242880 Jan 9 14:32 pikachu-nyan.gif
La información del buscador en el archivo dice...5,242,880 bytes (102 KB on disk)
Si esto es válido o no depende de cómo esté usando el archivo. En el ejemplo anterior, el GIF animado sigue funcionando en Firefox.