Se a ordem de classificação normal estiver correta (ou seja, seus arquivos são nomeados pela data), e seu shell suportar matrizes, você pode usá-los para isso, evitando as advertências habituais sobre o uso de ls
:
F=(./*.{gz,xz,ext4}) # list files
G=("${F[@]:5}") # pick all but the first five to another array
G=("${F[@]:0:${#F[@]}-5}") # or pick all but the last five
rm -- "${G[@]}" # remove them
zsh
pode ordenar por data em si mesmo, então isso pegaria os arquivos correspondentes em uma matriz, classificada por hora de modificação
F=(./*.(gz|xz|ext4)(Om))
( (Om)
para o último mais recente, (om)
para o primeiro mais recente).
Processe a matriz como acima.
Claro, se você precisar ordenar por data de modificação, não pode usar zsh
e saber que seus nomes de arquivos são bons , um simples ls -t | tail -n +6
faria.
( tail -n +6
começa a imprimir na sexta linha, ou seja, pula as cinco primeiras. Eu tive um pouco de folga neste momento.)
Com o GNU ls, acho que poderíamos pedir para citar os nomes dos arquivos para criar uma entrada adequada para o shell e, em seguida, preencher o array com a saída:
eval "F=($(ls -t --quoting-style=shell-always ./*.{xz,gz}))"
Mas isso requer confiar que ls
e o shell concordam em como aspas são interpretadas.