Dateien mit den kleinsten Dateinamensuffixen entfernen

Dateien mit den kleinsten Dateinamensuffixen entfernen

Ich habe ein Verzeichnis mit Dateien mit ähnlichen Namen, aber mit aufsteigenden Ziffern als Suffix. Ich möchte die Dateien mit dem niedrigeren Suffix entfernen und nur die Dateien mit dem höchsten Suffix behalten. Unten sehen Sie eine Beispieldateiliste:

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

Die obige Liste muss auf die folgenden Dateien reduziert werden:

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

Ich weiß nicht einmal, wo ich damit anfangen soll, aber wenn möglich, hätte ich gerne einen einzelnen Bash-Befehl.

Antwort1

KomplexPipeline:

Dateiliste:

$ 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

Ergebnisse:

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

Antwort2

Mit 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

(sehenWie verwendet man assoziative Arrays sicher in arithmetischen Ausdrücken?warum wir hier letanstelle von verwenden ((...))).

verwandte Informationen