Em um sistema Linux, existe alguma maneira de concatenar uma série de arquivos em um arquivo exposto para leitura e gravação sem ocupar mais N bytes de espaço em disco? Eu estava esperando algo como montar esses arquivos via loopback / devmapper para fazer isso.
Eu tenho um problema em que há arquivos binários divididos que podem ficar muito grandes. Não quero duplicar meus requisitos de espaço com E / S de disco massiva apenas para ler / gravar temporariamente o conteúdo desses arquivos, cat
reunindo-os todos em um arquivo enorme.
Encontrei este projeto aqui , mas parece ter um caso de uso muito específico e também depende do perl
Respostas:
Você pode fazer isso combinando dispositivos de loop e mapeador de dispositivos, graças a "tudo é um arquivo". Mas com uma limitação: O tamanho do arquivo não pode ser alterado (pois você não pode aumentar os dispositivos de bloco gravando neles). Portanto, se você deseja anexar dados, é necessário criar um dispositivo de bloco maior e substituir os dados fictícios anexados.
Para estender o arquivo, você pode criar um grande arquivo esparso e usá-lo como dispositivo adicional.
fonte
Isso pode ser feito usando o pipe nomeado no Linux.
Suponha que você tenha arquivos nomeados
file0, file1, file2, file3, file4, file5
Em C programaticamente, você pode fazer
Em seguida, use e use mynewfile como você leria do arquivo normal.
mynewfile é um arquivo FIFO
fonte
Para leitura, você pode
less
vários arquivos e, em seguida, usar as opções:n
e:p
para percorrê-los.Para escrever, sem acessar os arquivos diretamente, você não poderá gravá-los.
Você também pode ter
vim
vários arquivos, e ele passará pela ordem em que foram chamados (ou seja,vim fileA fileB fileC
- arquivoB aberto após o arquivoA fechado, arquivoC aberto após o arquivoB fechado).fonte