¿Es posible crear un archivo que sea solo una subsecuencia de bytes de otro archivo, como un enlace simbólico, pero que solo haga referencia a una parte del archivo?
¿Es posible crear un archivo que sea solo una subsecuencia de bytes de otro archivo, como un enlace simbólico, pero que solo haga referencia a una parte del archivo?
Respuestas:
No. Debe hacer referencia al archivo completo o debe copiar la parte del archivo que le interesa.
Sí, es (algo) posible al menos en Linux con algunas limitaciones.
El método consiste en crear un dispositivo de bucle de lectura y escritura que se asigne a un subconjunto del archivo.
p.ej:
#!/bin/bash
for ((i=0;i<10000;i++)); do
printf "%7d\n" $i
done >/var/tmp/file
losetup -v -f -o 512 --sizelimit 512 /var/tmp/file
losetup -a
head -2 /var/tmp/file
echo ...
tail -2 /var/tmp/file
echo ===
head -2 /dev/loop0
echo ...
tail -2 /dev/loop0
printf "I was here" > /dev/loop0
grep here /var/tmp/file
losetup -d /dev/loop0
salida:
loop device: /dev/loop0
/dev/loop0: [0808]:136392 (/var/tmp/file), offset 512, size 512
0
1
...
9998
9999
===
64
65
...
126
127
I was here 65
Creo que tanto el desplazamiento como el tamaño deben ser múltiples de un tamaño de bloque (512 bytes).
Probablemente necesite ser root para crear y acceder al dispositivo de bucle.
Si necesita un enlace simbólico, puede crear uno que apunte al dispositivo de bucle.
Podría ser posible (crear un enlace simbólico normal que apunte a una parte de un archivo) en un sistema de archivos que implementa la idea de "archivo como directorio" , que apareció, además de otros autores, en los planes para reiserfs , pero la implementación del reiserfs no me agradaron los problemas que causó la implementación.