Eliminar archivos con sufijos de nombre de archivo más pequeños

Eliminar archivos con sufijos de nombre de archivo más pequeños

Tengo un directorio de archivos con nombres similares, pero con dígitos incrementales como sufijo. Quiero eliminar los archivos con el sufijo inferior y conservar solo los archivos con el sufijo más alto. A continuación se muestra una lista de archivos de ejemplo:

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

La lista anterior debe reducirse a los archivos siguientes:

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

Ni siquiera sé por dónde empezar con esto, pero si es posible me gustaría un único comando bash.

Respuesta1

Complejotubería:

Lista de archivos:

$ 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

Respuesta2

Con 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

(ver¿Cómo utilizar matrices asociativas de forma segura dentro de expresiones aritméticas?por qué estamos usando leten lugar de ((...))aquí).

información relacionada