xargs: строка аргументов слишком велика (или изменение лога построчно)

Изображение пользователя tswet.

Итак, нашел небольшой баг в своей предыдущей записи в блоге http://kubuntu.ru/node/6346

После команды
cat /путь/к/логу/log.txt | sed "s/#//g" | xargs -0 printf >/путь/к/логу/log.txt

если в log.txt слишком много данных, то xarg выдает ошибку
xargs: строка аргументов слишком велика

Нехорошо получается, надо бы исправиться :)
Мысль такая - заставить xargs считывать лог файл не целиком, а построчно.

Убираем для начала из лог-файла все символы # и записываем результат в обработанный лог
cat /путь/к/логу/log.txt | sed "s/#//g" >/путь/к/логу/обработанному/test-log.txt
Описываем переменную, которая будет содержать результат выполнения команды подсчета числа строк в обработанном лог-файле
logeven="`wc -l /путь/к/логу/обработанному/test-log.txt | tr "/" "\n" | head -1`"
Добавляем дату создания лога с целью перезаписи данных в первоначальный лог-файл
echo "backup `date "+%Y-%m-%d"` /путь/к/логу/log.txt
Начинаем цикл, который для каждой из строк, от 1 до переменной logeven (число строк в лог-файле), выполнит преобразование из восьмибитной кодировки в читаемый формат
for ((log=1; log<=logeven; log++))
do
cat /путь/к/логу/обработанному/test-log.txt | head -$log | tail -1 | xargs -0 printf >>$/путь/к/логу/log.txt                  
done

Удаляем обработанные ненужные логи
find /путь/к/логу/обработанному/ -maxdepth 1 -name "test-log.txt" -exec rm -f {} \;

Спасибо за внимание :)

Комментарии (1)

0
Гость - 25 Декабрь, 2014 - 14:24

А не проще ли?

for log in `cat /путь/к/логу/обработанному/test-log.txt`
do
echo ${log} >> /путь/к/логу/log.txt
done

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры