У меня есть файл журнала размером 226 ГБ, и я хочу split
это на куски для простоты xz
ing. Проблема в том, что в моем рабочем пространстве осталось только 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
- Думаю, вы можете сжать файл журнала достаточно хорошо, чтобы уместить как исходную, так и сжатую части в оставшееся пространство.
Получите количество строк:
wc -l myFile.txt
Использовать 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
Вы также можете написать сценарий. Однако, вероятно, потребуется некоторое время, чтобы запустить его, и было бы намного лучше просто разобраться с этим вне коробки.