Если вы хотите использовать bash , это легко сделать с помощью двух команд:
$ t=$(find . -maxdepth 1 -type f -printf "%T@\n" | sort -rg | awk '(NR==9)')
$ [[ "$t" != "" ]] && find . -maxdepth 1 -type f ! -newermt "@${t}" -delete
Первая команда находит 9-й младший файл и выбирает время его модификации в эпоху.Вторая команда выбирает все файлы, которые не новее, чем это время модификации.(Вот почему мы выбираем 9-й раз, чтобы сохранить 8 самых младших)
Если вы хотите сделать это в zsh , вы можете сделать следующее:
$ files=( *(.om) )
$ (( ${#files[9,-1]} != 0 )) && rm "${files[9,-1]}"
Это создает файлы массивов, которые содержат файлы (.)
, отсортированные (om)
по времени модификации.Затем мы выбираем файлы, начиная с позиции 9 до конца.Чтобы быть в безопасности, мы сначала проверяем, есть ли файлы в этом подсписке.
Оба метода, представленные здесь, позволяют избежать проблем, которые могут возникнуть у вас с забавными именами файлов.