
Мне хотелось бы эффективно объединять двоичные файлы с помощью команд оболочки, и я быстро нашел классические способы, такие как этот:
cat file1 file2 > file3
Неплохо, но:
- Это медленно. Доступ к вводу-выводу медленный.
- Нужно дополнительное место. Я не хочу копировать файлы. Просто объедините их.
Файловые системы отлично справляются с фрагментацией файлов. Разве мы не можем просто объединить файлы, используя этот механизм?
решение1
Вы можете сделать это:
cat file2 file3 [...] filen >> file1
Это объединит file2
, file3
,..., filen
в конец file1
in-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