我在几个文件夹中有一堆文件,名称格式为NumA_NumB_NumC.jpg(例如:1000_5000_001.jpg)。每个NumA都有一个或多个NumB。每一个NumB都有几个NumC。对于每个NumA_NumB组,我只想保持最低的NumC。
例如:
- 1000_5000_001.jpg<-保持
- 1000_5000_002.jpg<-删除
- 1000_5000_003.jpg<-删除
- 1000_5001_032.jpg<-保持
- 1000_5001_033.jpg<-删除
(注意:NumB数字没有规律性,除了每组中最低的一个是要保留的那个)
最好的方法是什么?我在想用正则表达式编写linux shell脚本,但语法现在有点让我难以理解。有人能帮我吗?
使用sort+awk
ls *.jpg|sort -t_ -k1.1n -k2.2n -k3.3n |awk -F _ '!a[$1 FS $2]++'
1000_5000_001.jpg
1000_5001_032.jpg
如果您的排序命令具有-V
选项
-V, --version-sort
natural sort of (version) numbers within text
你可以有一个更短的:
ls *.jpg|sort -V |awk -F _ '!a[$1 FS $2]++'
find . -type f -name '*_*_*.jpg' -printf "%f %pn" |
awk '{split($1, a, "_"); if (seen[a[1],a[2]]++ == 0) {$1=""; print}}' |
xargs echo rm