удалите низкий номер версии файла

Если это - Ваш собственный сценарий, можете быть Вы, может отправить интерактивный вывод в stderr.

4
16.02.2015, 23:45
2 ответа

Это можно сделать с помощью GNU ls+awk one-liner:

ls -vr *.depot | awk -F- '$1 == name{system ("rm \""$0"\"")}{name=$1}'

Объяснение: имена файлов передаются как входные данные в сценарий awk. Опции -vr приводят к тому, что имена файлов сортируются как номера версий в обратном порядке, поэтому, например, foo-1.9.depot передается после foo-1.10.depot. Сценарий awk хранит первую часть имени (до первой -) в переменной name. Когда первая часть текущего имени идентична первой части предыдущего имени, скрипт вызвал rm для удаления текущего файла (который является более старой версией).

6
27.01.2020, 20:49
$ cat remover
#!/usr/bin/perl

for(<*depot>){
  if(/(\w.*?)-(\d+)(?:\.(\d+))?\.(\d+)-/){
     $norm=sprintf("%04d%04d%04d",$2,$3,$4);
     if($v{$1} and $v{$1} > $norm){ unlink($_) ; next }
     if($v{$1}                   ){ unlink($name{$1}) }
     $v{$1}=$norm;
     $name{$1}=$_;
  }
}

попробуйте perl remover и замените print на system, если вам нравится вывод

.
2
27.01.2020, 20:49

Теги

Похожие вопросы