Назад | Перейти на главную страницу

Разделить большой файл журнала БЕЗ сохранения оригинала (разделение на месте)

У меня есть файл журнала размером 226 ГБ, и я хочу split это на куски для простоты xzing. Проблема в том, что в моем рабочем пространстве осталось только 177 ГБ.

Есть ли способ split напильником пополам или в N количество фрагментов без сохранения дополнительной копии оригинала?

    $ split myFile.txt
    $ ls -halF
-rw-r--r--   1 user group 35 Dec 29 13:17 myFile.txt
-rw-r--r--   1 user group 8 Dec 29 13:18 xaa
-rw-r--r--   1 user group 3 Dec 29 13:18 xab
-rw-r--r--   1 user group 5 Dec 29 13:18 xac
-rw-r--r--   1 user group 10 Dec 29 13:18 xad
-rw-r--r--   1 user group 8 Dec 29 13:18 xae
-rw-r--r--   1 user group 1 Dec 29 13:18 xaf

Я бы предпочел просто не оставлять myFile.txt и иметь только разделенные файлы. Я бы с удовольствием просто придерживался поведения по умолчанию и удалил оригинал, но у меня просто нет свободного места для работы, чтобы добиться этого.

Я не эксперт в sed или awk но я подумал, может быть, есть способ «удалить в другой файл» такого поведения, которого можно добиться с помощью одного из них?

Что может сработать, так это передать его части прямо в xz - Думаю, вы можете сжать файл журнала достаточно хорошо, чтобы уместить как исходную, так и сжатую части в оставшееся пространство.

  1. Получите количество строк:

    wc -l myFile.txt
    
  2. Разделите это на столько частей, сколько захотите, например 10к строк на деталь.
  3. Использовать sed чтобы вставить ту часть, в которую вы хотите xz:

    sed -n '1,10000p' myFile.txt | xz > outfile01.xz 
    sed -n '10001,20000p' myFile.txt | xz > outfile02.xz
    

и т.д. Конечно, это можно сделать с помощью сценария.

Но, честно говоря, делайте, как сказано в EEAA ...

Вы можете делать последовательные воплощения хвоста и обрезать чтобы отрезать куски от конца массивного файла.

Что-то вроде

tail -n 10000 myFile.txt > myFile.001.txt
truncate -s -$(wc -c myFile.001.txt) myFile.txt
xz myFile.001.txt
rm myFile.001.txt

Вы также можете написать сценарий. Однако, вероятно, потребуется некоторое время, чтобы запустить его, и было бы намного лучше просто разобраться с этим вне коробки.