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 let
anstelle von verwenden ((...))
).