Если это - Ваш собственный сценарий, можете быть Вы, может отправить интерактивный вывод в stderr
.
Это можно сделать с помощью 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
для удаления текущего файла (который является более старой версией).
$ 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
, если вам нравится вывод