bash удаление старых файлов в дирректории с сохранением последних X файлов
Необходимо удалить старые бэкапы из указанной дирректории, которые старше 5 дней. При условии, что после удаления, в дирректории останется не меньше X файлов. Если файлов останется меньше, то не удалять.
Краткое описание ситуации: Иногда сервер выключен, поэтому бэкапы делаются не постоянно. Сервер запускают через неделю и скрипт удаляет все бэкапы. А надо бы сохранить последние X файлов, и не важно, что они старше 5 дней.
Раньше было реализовано через find
find /path -mtime +5 -exec rm {} \;
Но это не решает проблему, описанную выше
Ответы (2 шт):
#!/bin/bash
fp="/home/user/testf"
#Полный путь к удаляемым файлам нужен, чтобы не удалить файл скрипта,
#скрипт расположен в каталоге /home/user/testf, резервные копии /home/user/testf/rc
#Сохраняем содержимое каталога rc отсортированого по времени
ls -t $fp/rc/* > df.txt
#Подсчитываем количество строк
str=$(wc -l < df.txt)
#Если количество строк(файлов) больше 5
if [ $str -gt 5 ];then
#Удаляем из файла с первой по пятую строку
sed -i '1,5d' df.txt
#Удаляем файлы имена которых записаны в файле df.txt
cat df.txt|xargs rm
fi
К ответу @Oopss
ls -t ./* | tail -n +3 | xargs rm
ls -t - вывести отсортировав по времени
$ ls -t
10 9 8 7 6 5 4 3 2 1
tail -n +3 - хвост списка начиная с 3его сначала, чтоб оставить 5 - пиши +6
$ ls -t | tail -n +3
8
7
6
5
4
3
2
1
xargs rm - передает список команде rm