bash удаление старых файлов в дирректории с сохранением последних X файлов

Необходимо удалить старые бэкапы из указанной дирректории, которые старше 5 дней. При условии, что после удаления, в дирректории останется не меньше X файлов. Если файлов останется меньше, то не удалять.

Краткое описание ситуации: Иногда сервер выключен, поэтому бэкапы делаются не постоянно. Сервер запускают через неделю и скрипт удаляет все бэкапы. А надо бы сохранить последние X файлов, и не важно, что они старше 5 дней.

Раньше было реализовано через find

find /path -mtime +5 -exec rm {} \;

Но это не решает проблему, описанную выше


Ответы (2 шт):

Автор решения: Oopss
#!/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
→ Ссылка
Автор решения: eri

К ответу @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

→ Ссылка