Можно ли объединить двоичные файлы без операции копирования, используя файловую систему?

Можно ли объединить двоичные файлы без операции копирования, используя файловую систему?

Мне хотелось бы эффективно объединять двоичные файлы с помощью команд оболочки, и я быстро нашел классические способы, такие как этот:

cat file1 file2 > file3

Неплохо, но:

  1. Это медленно. Доступ к вводу-выводу медленный.
  2. Нужно дополнительное место. Я не хочу копировать файлы. Просто объедините их.

Файловые системы отлично справляются с фрагментацией файлов. Разве мы не можем просто объединить файлы, используя этот механизм?

решение1

Вы можете сделать это:

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

Это объединит file2, file3,..., filenв конец file1in-place. >>Оператор сообщает оболочке, что нужно записать вконец файла.

Вы хотите использовать файловую систему для «обработки фрагментации файлов». К сожалению, нет общего способа сделать это. Это потому, что «файловые системы» гораздо более общие, чем файловые системы на дисках — например, у вас естьНФС,ПРЕДОХРАНИТЕЛЬи многие другие механизмы, которые позволяют вам раскрывать любой вид ресурса (не толькоблочные устройстванапример, жесткие диски) как иерархия файловой системы. Даже для файловых систем на основе блочных устройств не существует стандартного механизма для этого, и я не знаю никаких механизмов, специфичных для конкретной реализации.

решение2

Расположите имена файлов в текстовом файле, который называется , list.txtразделенный новыми строками. Затем запустите это в bash:

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

Это создаст объединенный файл «out» в текущем каталоге.

решение3

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

Связанный контент