Создать bash скрипт который группирует файлы и ищет последний
Суть задачи.
Нужно создать bash скрипт, который в папке с бэкапами, будет находить последний бэкап для каждого FileName и оставлять его, остальные удалять.
За удалением вопрос не стоит, но проблема создать файл с исключениями.
Есть набор бэкапов в формате:
FileName1_backup_2021_07_08_020002_8911811.7z
FileName1_backup_2021_07_09_020002_1962478.7z
FileName1_backup_2021_07_10_020001_3497985.7z
FileName2_backup_2021_07_08_020002_8755507.7z
FileName2_backup_2021_07_09_020002_1962478.7z
FileName2_backup_2021_07_10_020001_3497985.7z
FileName3_backup_2021_07_08_020002_8911811.7z
FileName3_backup_2021_07_09_020002_1962478.7z
FileName3_backup_2021_07_10_020001_3497985.7z
FileName4_backup_2021_07_08_020002_8911811.7z
FileName4_backup_2021_07_09_020002_2118806.7z
FileName4_backup_2021_07_10_020001_3497985.7z
FileName5_backup_2021_07_08_020002_7661758.7z
С условием, что мы не знаем какое будет название для файла FileName, но точно знаем что оно будет повторяться.
Ответы (1 шт):
Автор решения: Pak Uula
→ Ссылка
Поиск самых свежих бэкапов
ls *_backup_*.7z | \
sed -e 's/_backup_[0-9_]\+\.7z//' | \
sort | uniq | \
while read fname; do
ls "${fname}"_backup_*.7z | tail -1
done
sed отрезает хвосты именам файлов, sort|uniq создаёт список префиксов, в цикле для каждого префикса формируется список файлов, из которого извлекается последний.
Результат на вашем списке
FileName1_backup_2021_07_10_020001_3497985.7z
FileName2_backup_2021_07_10_020001_3497985.7z
FileName3_backup_2021_07_10_020001_3497985.7z
FileName4_backup_2021_07_10_020001_3497985.7z
FileName5_backup_2021_07_08_020002_7661758.7z