Command-Line
刪除文件名後綴最小的文件
我有一個名稱相似的文件目錄,但以遞增數字作為後綴。我想刪除後綴較低的文件,只保留後綴最高的文件。下面是一個範例文件列表:
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 命令。
複雜的管道:
文件列表:
$ 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
與
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
而不是((...))
這裡)。