Podemos mesclar arquivos binários sem qualquer operação de cópia manipulando o sistema de arquivos?

Podemos mesclar arquivos binários sem qualquer operação de cópia manipulando o sistema de arquivos?

Eu gostaria de mesclar arquivos binários de forma eficiente usando um comando shell e rapidamente encontrei formas clássicas como esta:

cat file1 file2 > file3

Não é ruim, mas:

  1. É lento. O acesso IO é lento.
  2. Precisa de espaço extra. Não quero copiar os arquivos. Basta concatená-los.

Os sistemas de arquivos são ótimos para lidar com a fragmentação de arquivos. Não podemos simplesmente mesclar arquivos usando esse mecanismo?

Responder1

Você consegue fazer isso:

cat file2 file3 [...] filen >> file1

Isso concatenará file2, file3,..., filenao final do file1local. O >>operador diz ao shell para escrever nofinal do arquivo.

Você deseja aproveitar o sistema de arquivos para "lidar com a fragmentação de arquivos". Infelizmente, não existe uma maneira geral de fazer isso. É porque os "sistemas de arquivos" são muito mais gerais que os sistemas de arquivos em discos - por exemplo, você temNFS,FUSÍVEL, e muitos outros mecanismos que permitem expor qualquer tipo de recurso (não apenasbloquear dispositivoscomo discos rígidos) como uma hierarquia de sistema de arquivos. Mesmo para sistemas de arquivos baseados em dispositivos de blocos, não existe um mecanismo padrão para fazer isso e também não conheço nenhum mecanismo específico de implementação.

Responder2

Coloque seus nomes de arquivos em ordem em um arquivo de texto list.txtseparado por novas linhas. Então execute isso no bash:

while read line; do echo -n . ; dd if="$line" of=out status=none conv=notrunc oflag=append; done < list.txt

Isto criará o arquivo concatenado 'out' no diretório atual.

Responder3

    dd if=firstfile.raw > completedfile.raw
    dd if=nfile.raw    >> completedfile.raw
    dd if=lastfile.raw >> completedfile.raw

informação relacionada