Вывести содержимое последних логов в один файл (ленивая версия с извращениями, Solaris)

Я всё усложнил, можно было сделать гораздо проще, но такими сложностями заставляешь себя вспоминать многие вещи, которыми нечасто пользуешься.

Сначала получим список последних файлов, исключив директории, и запишем его в файл:

ls -lAtr /tmp | grep "^-" | awk '{print $9}' | tr "\n" " " > /tmp/filenames.txt
tr "\n" " " - позволяет заменить перенос строки на пробел

Редактируем файл filelist.txt в vi, удаляем оттуда имя файла ‘filelist.txt’. Почему руками? А чтобы вспомнить, как пользоваться vi. Напоминалка: 25dd — удалить 25 строк, 500x — удалить 500 символов.

Читаем файл со списком и выводим содержимое файлов с их названием:

 for filename in $(cat /tmp/filelist.txt); do 

echo "==== $filename ===="; 

cat "$filename"; 

done > /tmp/output.txt

В результате получаем сообщение:

«cat: input/output files ‘/tmp/output.txt’ identical»

WTF???

Ага, косяк с том, что в списке файлов присутствует и сам ‘output.txt’, я забыл его удалить с прошлых тестов. Исправляюсь:

В Solaris не работает sed -i, вместо этого использую perl:

perl -pi -e ‘s/output.txt//’ /tmp/filelist.txt

Теперь после повторного выполнения скрипта с циклом for, что был выше, не появятся сообщения.

PROFIT!

 

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