Удалить все файлы кроме последнего. [BASH] [Решено]

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

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

0
reddog - 7 Июль, 2009 - 11:30
Изображение пользователя reddog.

делаешь bash файл, алгоритм такой... переходишь в каталог, выполняешь ls -l весь массив проверяешь на последню дату(проверка проста функции типа Copy, работа со строками) и остовляешь остальное откидываешь в отдельный массив и удаляешь. Еще нужна проверка на каталоги. Если делать на исключительные файл(выборка по имени) то достаточно создать массив с списком имен и выполнять проверку после ls -l перед проверкой на дату.

+4
Voyageur - 7 Июль, 2009 - 14:00
Изображение пользователя Voyageur.

Предлагаю вот такую команду:rm `ls -t --full-time | awk '{if (NR > 2)printf("%s ",$9);}'`Немного поясню. Вы находитесь в каталоге с логами, причем (как я понял) в этом каталоге только логи и есть.
Вы удаляете (rm) те файлы, которые вернет команда `ls -t --full-time | awk '{if (NR > 2)printf("%s ",$9);}'`. Эта команда делает ls данного каталога сортируя вывод по дате последнего изменения (опция -t) причем дата последнего изменения берется полной из-за опции --full-time (выглядит как-то так: 2009-07-07 14:48:13.214796930 +0400). При такой сортировке у Вас файл, измененный последним, будет вверху. Команда ls -t --full-time выведет Вам не только упорядоченный список файлов, но и строку total (что именно она считает, я не знаю - не смотрел))). Суть в том, что в таком выводе файл, который нам надо оставить, будет вторым по порядку, а все, что ниже, можно спокойно удалить. Поэтому вывод команды ls мы перенаправим на вход потокового редактора, где выкинем из вывода первые две строки (total и файл, который удалять не надо), а из остальных строк распечатаем только название файла. Соответственно, все, что мы выведем, удалится командой rm.

0
dexif - 7 Июль, 2009 - 14:25
Изображение пользователя dexif.

Сенк выручили :)