Remova arquivos com menores sufixos de nome de arquivo

Remova arquivos com menores sufixos de nome de arquivo

Eu tenho um diretório de arquivos com nomes semelhantes, mas com dígitos incrementais como sufixo. Quero remover os arquivos com sufixo mais baixo e manter apenas os arquivos com o sufixo mais alto. Abaixo está um exemplo de listagem de arquivos:

1k_02.txt
1k_03.txt
1l_02.txt
1l_03.txt
1l_04.txt
2a_05.txt
2a_06.txt
4c_03.txt
4c_04.txt

A lista acima precisa ser reduzida aos arquivos abaixo:

1k_03.txt
1l_04.txt
2a_06.txt
4c_04.txt

Eu nem sei por onde começar, mas se possível, gostaria de um único comando bash.

Responder1

Complexogasoduto:

Lista de arquivos:

$ ls
1l_04.txt 2a_05.txt 4c_03.txt 1k_03.txt 1l_02.txt 4c_04.txt 2a_06.txt 1l_03.txt 1k_02.txt

printf "%s\n" * | sort -t'_' -k1,1 -k2nr | awk -F'_' 'a[$1]++' | xargs rm

Resultados:

$ printf "%s\n" *
1k_03.txt
1l_04.txt
2a_06.txt
4c_04.txt

Responder2

Com zsh:

$ ls
1k_02.txt  1l_02.txt  1l_04.txt  2a_06.txt  4c_04.txt
1k_03.txt  1l_03.txt  2a_05.txt  4c_03.txt
$ (typeset -A seen; for f (*_*(nOn)) let 'seen[${f%_*}]++' && rm -- $f)
$ ls
1k_03.txt  1l_04.txt  2a_06.txt  4c_04.txt

(verComo usar matrizes associativas com segurança dentro de expressões aritméticas?por que estamos usando letem vez de ((...))aqui).

informação relacionada