Удалить файлы с наименьшими суффиксами в имени файла

Удалить файлы с наименьшими суффиксами в имени файла

У меня есть каталог файлов с похожими именами, но с увеличивающимися цифрами в качестве суффикса. Я хочу удалить файлы с меньшим суффиксом и оставить только файлы с большим суффиксом. Ниже приведен пример списка файлов:

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

Приведенный выше список необходимо сократить до следующих файлов:

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

Я даже не знаю, с чего начать, но если возможно, мне бы хотелось иметь одну команду bash.

решение1

Сложныйтрубопровод:

Список файлов:

$ 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

Полученные результаты:

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

решение2

С 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

(видетьКак безопасно использовать ассоциативные массивы внутри арифметических выражений?почему мы используем letвместо ((...))здесь).

Связанный контент