Como encontrar lacunas na lista?

1

Então, eu tenho muitos arquivos (167k) e agora eles estão na ordem correta, graças ao script do Serg aqui - link .

E agora eu preciso encontrar lacunas entre nomes de arquivos, a diferença deve ser 15 e mais

Aaaa.bb - 000002 tag tag_tag 9tag  
Aaaa.bb - 000125 tag tag_tag 9tag  
Aaaa.bb - 000130 tag tag_tag 9tag  

Todos começam do mesmo jeito e têm finais diferentes.
Tudo está no HDD externo.

    
por Ceslovas 18.10.2015 / 20:20

2 respostas

1
find . -maxdepth 1  -type f -regextype posix-awk -iregex ".*[:digit:]"| sort | awk '{  if ( ( - previous) > 15 ) print previous"**"}{ previous= }'

O código acima usa o comando find , que corresponde a todos os arquivos no diretório atual que contêm dígitos, os ordena e passa para awk . awk passa pela lista, armazena cada número do campo 3 na variável previous e no próximo item compara previous com o número atual

    
por Sergiy Kolodyazhnyy 19.10.2015 / 00:22
1

uma versão em python (python3 para ser preciso).

salve o programa abaixo sob o nome diff_filename.py (torne-o executável) e use-o da seguinte maneira:

$ ./diff_filename.py the/directory/containing/the/files

o programa assume que os números que você deseja comparar estão sempre na mesma posição do nome do arquivo (índices 10:16).

como é agora, é bem detalhado e imprime nomes de arquivos corretos, incluindo a diferença. assim que atinge um nome de arquivo que não respeita a diferença mínima, ele imprime e pára.

aqui está o código fonte:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

'''
usage: ./diff_filename.py the/directory/containing/the/files
'''

import os
import  sys

MIN_DIFF = 15

the_dir = sys.argv[1]
sorted_files = sorted(os.listdir(the_dir))

last_number = None
last_file = None
for current_file in sorted_files:
    current_number = int(current_file[10:16])
    if last_number is None:
        last_number = current_number
        last_file = current_file
        continue
    diff = current_number - last_number
    if diff < MIN_DIFF:
        print('fail! "{}" and "{}" do not respect MIN_DIFF={}'.format(
            last_file, current_file, MIN_DIFF))
        break
    else:
        print('ok! "{}" and "{}" diff={}'.format(last_file, current_file, diff))

    last_number = current_number
    last_file = current_file
    
por hiro protagonist 18.10.2015 / 20:40