Link simbólico para parte do arquivo?

14

É possível criar um arquivo que seja apenas uma sub-sequência de bytes de outro arquivo, como um link simbólico, mas que faça referência apenas a parte do arquivo?

ShyBoy
fonte
4
Talvez se você explicar o propósito do que está tentando fazer, sugerimos uma solução.
JRT

Respostas:

12

Não. Você deve fazer referência ao arquivo inteiro ou copiar a parte do arquivo em que está interessado.

Ignacio Vazquez-Abrams
fonte
12

Sim, é (um pouco) possível pelo menos no Linux com algumas limitações.

O método é criar um dispositivo de loop de leitura e gravação que mapeie para um subconjunto do arquivo.

por exemplo:

#!/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

resultado:

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

Acredito que o deslocamento e o tamanho devem ser múltiplos de um tamanho de bloco (512 bytes).

Você provavelmente precisa ser root para criar e acessar o dispositivo de loop.

Se você precisar de um link simbólico, poderá criar um que aponte para o dispositivo de loop.

jlliagre
fonte