Encontre os arquivos numerados mais altos no diretório

0

cenário: Um sistema de backup cria arquivos rar e os divide em partes de 100 MB. Eu gostaria de encontrar os arquivos numerados mais altos dentro deste diretório.

Por exemplo, entrada e saída:

Entrada:

Backup_UniqueName123_part1.rar
Backup_UniqueName123_part2.rar
Backup_UniqueName123_part3.rar
Backup_RandomName_part1.rar
Backup_RandomName_part2.rar
Backup_Server_part1.rar
Backup_Server_part2.rar

Saída:

Backup_UniqueName123_part3.rar
Backup_RandomName_part2.rar
Backup_Server_part2.rar
    
por br0ken.pipe 06.06.2016 / 13:21

2 respostas

0

Tente isto:

DIRPATH="/where/youre/files/are"

BASE=''
NUM=0
while read F; do
  test -e "$F" || continue
  FB=$(echo "$F" | sed 's/_part[0-9]*\.rar$//')
  FN=$(echo "$F" | sed 's/.rar$// ; s/.*\([0-9][0-9]*\)$//')
  if test "$BASE" == "$FB" ; then
    test $FN -gt $NUM && NUM=$FN
  else
    test -n "$BASE" && echo "${BASE}_part$NUM.rar"
    BASE=$FB
    NUM=$FN
  fi
done < <(ls -1 "$DIRPATH")

Explicação:

  • Extraímos o nome e o número base de cada nome de arquivo
  • Mantemos apenas o maior número
  • Quando um novo nome base é encontrado, imprimimos o antigo nome base e o maior número antigo
por 06.06.2016 / 13:48
0

Você também pode usar awk para processar os nomes dos arquivos:

{
    match($0, /(^.+)_part([0-9]+)\.rar/, parts);
    key = parts[1];
    new_count = parts[2];
    old_count = data[key];
    if (new_count > old_count) {
        data[key] = new_count;
    }
}

END {
    for (key in data) {
        print key, data[key];
    }
}
    
por 06.06.2016 / 15:07