Est-il possible de créer un fichier qui n'est qu'une sous-séquence d'octets à partir d'un autre fichier, comme un lien symbolique, mais ne référençant qu'une partie du fichier?
Est-il possible de créer un fichier qui n'est qu'une sous-séquence d'octets à partir d'un autre fichier, comme un lien symbolique, mais ne référençant qu'une partie du fichier?
Réponses:
Non. Vous devez soit référencer l'intégralité du fichier, soit copier la partie du fichier qui vous intéresse.
Oui, c'est (quelque peu) possible au moins sous Linux avec quelques limitations.
La méthode consiste à créer un périphérique de boucle de lecture-écriture qui correspond à un sous-ensemble du fichier.
par exemple:
#!/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
production:
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
Je crois que l'offset et la taille doivent être multiples d'une taille de bloc (512 octets).
Vous devez probablement être root pour créer et accéder au périphérique de boucle.
Si vous avez besoin d'un lien symbolique, vous pouvez en créer un qui pointe vers le périphérique de boucle.
Il pourrait être possible (pour créer un lien symbolique normal pointant vers une partie d'un fichier) sur un système de fichiers qui implémente l'idée "fichier comme répertoire" , qui est apparue - à côté d'autres auteurs - dans les plans pour reiserfs , mais l'implémentation de reiserfs n'a pas été apprécié pour les problèmes causés par la mise en œuvre.