如图:每个名称的zip包N个,需要删除zip包,每个名称(aaa,bbb,ccc,ddd)只保留最新的十个zip包
自己写的执行不行: ls -t | awk -F '-' '{if(NR>11){print $1}}' | xargs rm -faaa-1.0.0-1.zip
aaa-1.0.0-2.zip
aaa-1.0.0-3.zip
aaa-1.0.0-4.zip
aaa-1.0.0-5.zip
...
aaa-1.0.0-20.zip
bbb-1.0.0-1.zip
bbb-1.0.0-2.zip
bbb-1.0.0-3.zip
bbb-1.0.0-4.zip
bbb-1.0.0-5.zip
...
bbb-1.0.0-50.zip
ccc-1.0.0-1.zip
ccc-1.0.0-2.zip
ccc-1.0.0-3.zip
ccc-1.0.0-4.zip
ccc-1.0.0-5.zip
...
ccc-1.0.0-80.zip
ddd-1.0.0-1.zip
ddd-1.0.0-2.zip
ddd-1.0.0-3.zip
ddd-1.0.0-4.zip
ddd-1.0.0-5.zip
...
ddd-1.0.0-100.zip

解决方案 »

  1.   

    一般备份都是按天来或者安周、月来。按天来就比较简单:
    find . -name "aaa*.zip" -mtime +10
    find . -name "bbb*.zip" -mtime +10
    find . -name "ccc*.zip" -mtime +10
    find . -name "ddd*.zip" -mtime +10
      

  2.   


    但是包太多了,一个一个删太麻烦,想批量删;至少得有四五百不同名字的zip包
      

  3.   

    如果是标准的xyz*.zip,可以考虑正则取前三个alpha放到一个数组,然后再遍历,按照1楼方法做。
      

  4.   

    ls -t | awk -F '-' '{if(NR>3){print $1}}'|xargs -i rm -f {} \;