Eu dei uma olhada em alguns sistemas de arquivos de fusíveis, e o mais simples de trabalhar é o concatfs de Peter Schlaile. Se nada mais, seria um bom lugar para começar, já que a implementação do código C é pequena e autônoma.
Basicamente, para qualquer arquivo A você quer "symlink", em algum diretório de fontes arbitrárias S você cria um arquivo B que contém apenas as informações da tag id3 (versão 2) que você quer, então um arquivo mágico C com um nome de arquivo que contém os caracteres "-concat-" em algum lugar. Este arquivo C contém, em ordem, os nomes B e A .
Quando você executa o programa concatfs, você especifica o diretório de origem S e um segundo diretório de ponto de montagem arbitrário M . Em M você verá todos os mesmos arquivos que em S , mas quando você ler o arquivo C você obterá uma concatenação de B e A , ou seja, suas novas tags, seguidas pelos dados mp3 reais. Obviamente, apenas os arquivos mágicos precisam estar em S , já que você pode usar caminhos absolutos ou relativos em um arquivo mágico.
Isto não é perfeito porque se o seu arquivo A contiver as tags id3v2 (no início do arquivo) elas serão adicionadas àquelas em seu arquivo B . Além disso, as tags id3v1 (no final do arquivo) ainda estarão lá. No entanto, com algum código C, deve ser possível suprimir o início e o fim de A . Além disso, é trivial mudar a sequência mágica "-concat -".
Aqui estão os comandos que usei para testar concatfs. Instale o pacote fuse-devel
para que você possa compilar o código. O resto não precisa de você para ser root.
Faça o download e descompacte as fontes e compile-as:
cd concatfs
gcc -Wall src/concatfs.c $(pkg-config fuse --cflags --libs) -o concatfs
Crie os 2 diretórios, inicie o comando e copie alguns arquivos mp3 para tocar, removendo quaisquer tags:
mkdir -p ~/myfuse/src ~/myfuse/mnt
./concatfs ~/myfuse/src ~/myfuse/mnt # runs in background
cd ~/myfuse/src
cp ....sometestfile.mp3 try.mp3
id3v2 --delete-v1 try.mp3
id3v2 --delete-v2 try.mp3
id3info try.mp3
Crie o arquivo fictício, o arquivo mágico, e adicione algumas tags id3v2 ao arquivo fictício:
echo -e 'dummy.mp3\ntry.mp3' > try.mp3-concat-.mp3
> dummy.mp3
id3v2 -2 -c 'my description:my comment' -a 'my artist' -A 'my album' -y '2010' -T 1/2 dummy.mp3
hexdump -C dummy.mp3
ls -l
Procure no segundo diretório para encontrar os mesmos arquivos, mas o tamanho e o conteúdo do arquivo mágico é a concatenação dos dois arquivos:
ls ../mnt/ -l
cat ../mnt/try.mp3-concat-.mp3 | wc -c
id3info ../mnt/try.mp3-concat-.mp3
mediainfo ../mnt/try.mp3-concat-.mp3
Quando você mata o programa, pode ser necessário limpar a montagem:
fusermount -u ~/myfuse