Я всё усложнил, можно было сделать гораздо проще, но такими сложностями заставляешь себя вспоминать многие вещи, которыми нечасто пользуешься.
Сначала получим список последних файлов, исключив директории, и запишем его в файл:
ls -lAtr /tmp | grep "^-" | awk '{print $9}' | tr "\n" " " > /tmp/filenames.txttr "\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!