Удалить все, кроме последних n файлов каждого префикса (на основе даты файла)?

77
10

Я запускаю эту команду в своем скрипте и удаляет все, кроме 5 файлов, но не сохраняет последние 5 файлов по дате:

ls -rv | awk -F_ '++n[$1]>5' | xargs rm

** подчеркивание - это разделитель между префиксом (имя хоста) и именами файлов.

Я тоже пробовал что-то другое, но это не похоже на трюк.

Я запускаю это, чтобы удалить все, кроме последних n файлов в папке, и он работает правильно:

rm -f $(ls -1t -I "*.sh" | tail -n +21)

Однако это относится ко всему.

У меня есть еще одна папка, полная резервных копий с различных устройств, у которых есть префиксы хостов. Формат: hostname_config.backup-timestamp.

спросил(а) 2021-01-25T18:25:59+03:00 4 месяца, 3 недели назад
1
Решение
63

@rici решил это. Сбрасывание флагов -rv и использование -t создали поведение, которое я искал.

ls -t | awk -F_ '++n[$1]>5' | xargs rm

ответил(а) 2021-01-25T18:25:59+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема