Как объединить два файла в FreeBSD?
Имеем:
# ls -l
total 3146784
-rw-rw-r-- 1 root wheel 3221438976 20 ноя 12:29 f2
-rw-rw-r-- 1 root wheel 32256 11 фев 2003 f1Надо f1 + f2 = f3. Причем чтобы содержимое f1 оказалось в начале файла f3.
Какой командой это делается?
Можно конечно cat f2.d >>f1.d, но это как-то долго, в f2 все таки как никак 3 гига будет. Да и месте на диске нет для второго 3-х гигового файла.
>Можно конечно cat f2.d >>f1.d, но это как-то долгоСам же и ответил на свой вопрос. Это стандартный прием конкатенации файлов.
А что долго - так не думаю, что под форточками будет быстрее...> Да и месте на диске нет для второго 3-х гигового файла.
Однозначно будет создан результирующий файл с размером f1+f2.
И соответственное дисковое пространство под него потребуется.
Такова се ля ви... :)
>>Можно конечно cat f2.d >>f1.d, но это как-то долго
>
>Сам же и ответил на свой вопрос. Это стандартный прием конкатенации файлов.
>
>А что долго - так не думаю, что под форточками будет быстрее...
>
>
>> Да и месте на диске нет для второго 3-х гигового файла.
>
>Однозначно будет создан результирующий файл с размером f1+f2.
>И соответственное дисковое пространство под него потребуется.
>Такова се ля ви... :)Жопа блин какая-то получается. Придется значит винт дополнительный искать. :( Не ужели нет способа выкрутится в моем случае?
>Как объединить два файла в FreeBSD?
>Имеем:
># ls -l
>total 3146784
>-rw-rw-r-- 1 root wheel 3221438976 20 ноя 12:29 f2
>
>-rw-rw-r-- 1 root wheel
>32256 11 фев 2003 f1
>
>Надо f1 + f2 = f3. Причем чтобы содержимое f1 оказалось в
>начале файла f3.
>
>Какой командой это делается?
>
>Можно конечно cat f2.d >>f1.d, но это как-то долго, в f2 все таки как никак 3 гига будет. Да и месте на диске нет для второго 3-х гигового файла.программка на си или perl - открывает большой файл f2 и дописывает
в начало f1, по заверщении удаляет f1 и переименовывает (если нужно f2)ну детское задание.
>>Как объединить два файла в FreeBSD?
>>Имеем:
>># ls -l
>>total 3146784
>>-rw-rw-r-- 1 root wheel 3221438976 20 ноя 12:29 f2
>>
>>-rw-rw-r-- 1 root wheel
>>32256 11 фев 2003 f1
>>
>>Надо f1 + f2 = f3. Причем чтобы содержимое f1 оказалось в
>>начале файла f3.
>>
>>Какой командой это делается?
>>
>>Можно конечно cat f2.d >>f1.d, но это как-то долго, в f2 все таки как никак 3 гига будет. Да и месте на диске нет для второго 3-х гигового файла.
>
>программка на си или perl - открывает большой файл f2 и дописывает
>
>в начало f1, по заверщении удаляет f1 и переименовывает (если нужно f2)
>
>
>ну детское задание.прим: судя по размеру f1 - его вообще сразу можно в память прочитать и
удалить, потом дописать в начало f2.
>>>Как объединить два файла в FreeBSD?
>>>Имеем:
>>># ls -l
>>>total 3146784
>>>-rw-rw-r-- 1 root wheel 3221438976 20 ноя 12:29 f2
>>>
>>>-rw-rw-r-- 1 root wheel
>>>32256 11 фев 2003 f1
>>>
>>>Надо f1 + f2 = f3. Причем чтобы содержимое f1 оказалось в
>>>начале файла f3.
>>>
>>>Какой командой это делается?
>>>
>>>Можно конечно cat f2.d >>f1.d, но это как-то долго, в f2 все таки как никак 3 гига будет. Да и месте на диске нет для второго 3-х гигового файла.
>>
>>программка на си или perl - открывает большой файл f2 и дописывает
>>
>>в начало f1, по заверщении удаляет f1 и переименовывает (если нужно f2)
>>
>>
>>ну детское задание.
>
>прим: судя по размеру f1 - его вообще сразу можно в память
>прочитать и
>удалить, потом дописать в начало f2.Если не секрет, то чем дописывают в начало файла?
>>>>Как объединить два файла в FreeBSD?
>>>>Имеем:
>>>># ls -l
>>>>total 3146784
>>>>-rw-rw-r-- 1 root wheel 3221438976 20 ноя 12:29 f2
>>>>
>>>>-rw-rw-r-- 1 root wheel
>>>>32256 11 фев 2003 f1
>>>>
>>>>Надо f1 + f2 = f3. Причем чтобы содержимое f1 оказалось в
>>>>начале файла f3.
>>>>
>>>>Какой командой это делается?
>>>>
>>>>Можно конечно cat f2.d >>f1.d, но это как-то долго, в f2 все таки как никак 3 гига будет. Да и месте на диске нет для второго 3-х гигового файла.
>>>
>>>программка на си или perl - открывает большой файл f2 и дописывает
>>>
>>>в начало f1, по заверщении удаляет f1 и переименовывает (если нужно f2)
>>>
>>>
>>>ну детское задание.
>>
>>прим: судя по размеру f1 - его вообще сразу можно в память
>>прочитать и
>>удалить, потом дописать в начало f2.
>
>Если не секрет, то чем дописывают в начало файла?man open/close read/write seek/lseek printf/putc (CC)
>>>>>Как объединить два файла в FreeBSD?
>>>>>Имеем:
>>>>># ls -l
>>>>>total 3146784
>>>>>-rw-rw-r-- 1 root wheel 3221438976 20 ноя 12:29 f2
>>>>>
>>>>>-rw-rw-r-- 1 root wheel
>>>>>32256 11 фев 2003 f1
>>>>>
>>>>>Надо f1 + f2 = f3. Причем чтобы содержимое f1 оказалось в
>>>>>начале файла f3.
>>>>>
>>>>>Какой командой это делается?
>>>>>
>>>>>Можно конечно cat f2.d >>f1.d, но это как-то долго, в f2 все таки как никак 3 гига будет. Да и месте на диске нет для второго 3-х гигового файла.
>>>>
>>>>программка на си или perl - открывает большой файл f2 и дописывает
>>>>
>>>>в начало f1, по заверщении удаляет f1 и переименовывает (если нужно f2)
>>>>
>>>>
>>>>ну детское задание.
>>>
>>>прим: судя по размеру f1 - его вообще сразу можно в память
>>>прочитать и
>>>удалить, потом дописать в начало f2.
>>
>>Если не секрет, то чем дописывают в начало файла?
>
>man open/close read/write seek/lseek printf/putc (CC)Эххх... Выходит без сей и перлов никак. :(
Странно что нет таких вещей в базовой системе, вроде нужная вещь дописывать в начало в файла.
>>Если не секрет, то чем дописывают в начало файла?
>
>man open/close read/write seek/lseek printf/putc (CC)Тупо и в лоб (ведь write и fwrite не умеют требуемый нам "insert mode", а занимать много дополнительного места на диске по условию нельзя):
От конца большого файла к началу бежит "окошко" размером с маленький файл, которое переписывает данные "из себя" за свою правую границу. При первом применении оно пишет за правый край файла, увеличив его на размер маленького. Таким образом, дойдя до начала файла, мы "освободим" в начале нужное число байт. И впишем туда содержимое маленького.
Скорость алгоритма безобразно медленная (ведь фактически имеем произвольный доступ).
Давно не брал я в руки компилятор... Может, можно изящнее?
>Как объединить два файла в FreeBSD?
>Имеем:
># ls -l
>total 3146784
>-rw-rw-r-- 1 root wheel 3221438976 20 ноя 12:29 f2
>
>-rw-rw-r-- 1 root wheel
>32256 11 фев 2003 f1
>
>Надо f1 + f2 = f3. Причем чтобы содержимое f1 оказалось в
>начале файла f3.
>
>Какой командой это делается?
>
>Можно конечно cat f2.d >>f1.d, но это как-то долго, в f2 все таки как никак 3 гига будет. Да и месте на диске нет для второго 3-х гигового файла.а может можно обойтись без слияния файлов?
например использовать
cat f1 f2|some_comand
или netcat с опцией -e и получить данные через сокет?