刪除具有最小檔案名稱後綴的文件

刪除具有最小檔案名稱後綴的文件

我有一個名稱相似的檔案目錄,但以遞增的數字作為後綴。我想刪除後綴較低的文件,只保留後綴最高的文件。下面是一個範例文件列表:

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而不是在((...))這裡)。

相關內容