Listar nomes de arquivos ausentes em um padrão

Listar nomes de arquivos ausentes em um padrão
  1. Tenho muitos arquivos que começam com números e depois são hifenizados com descrições. Por exemplo:

    001 - awesomesauce
    216 - stillawesomesauce
    
  2. Eles são organizados por subdiretório

Então, como eu usaria bashum script ou alguma pesquisa interna nesses diretórios para ver se estou faltando um número na ordem? Ou seja, informo que estou faltando 002, 128, etc. no exemplo acima. Eu sei que posso ls {000..216}\ -*e ele listará os arquivos e gerará um erro se não os encontrar, mas existe uma maneira melhor de obter APENAS os arquivos ausentes e fazer isso recursivamente?

Responder1

Em uma gnuconfiguração você poderia executar:

myarr=( $(find . -type f -name '[0-9][0-9][0-9]*' -printf '%f\n' | cut -c1-3 | sort -n) )
join -v1 <(seq -w ${myarr[-1]}) <(printf '%s\n' ${myarr[@]})

Alternativamente, com zsh, você poderia tentar algo assim:

myarr=( **/[0-9][0-9][0-9]*(.one_'REPLY=${${REPLY:t}:0:3}'_) )
mynums=( {001..$myarr[-1]} )
print -l ${mynums:|myarr}

Ele extrai os números (os três primeiros dígitos) de cada nome de arquivo, classifica-os e salva o resultado em um array - myarr. Em seguida, ele define outro array - mynumscontendo números até 001o valor do último índice (ou seja, o número mais alto extraído dos nomes dos arquivos) e então usaexpansão de parâmetrospara remover os valores myarrda expansão de mynums.

Responder2

escrevifindmissingum script Pythonisso faz isso. Desenvolvi no macOS, mas deve funcionar em qualquer plataforma. Testei executá-lo com Python 2.7 e 3.6.

Aqui está uma amostra do meu script em ação:

$ cat sampleFile.txt | python findmissing.py -p "DSC003\.(\d+)"
12
13
14
16
17
18
22
23
24

...é gerado quando fornecido o seguinte arquivo:

Id                                  Name         Type   Size     Created
1Dgt5ZFKT3zilwPZdiPyPmhM0Y3Fz_xo8   DSC003.010   bin    1.1 GB   2018-06-12 16:57:14
16QPadXBXPGIwiRhzMFRuY7tZkdIlJ1DI   DSC003.011   bin    1.1 GB   2018-06-12 16:54:57
1zD492J3F42Azeoct82DMlXRRuWA8AUiY   DSC003.015   bin    1.1 GB   2018-06-12 17:32:12
1bah8OM_F49BNeoct8M2DlXRRuOD8AUiY   DSC003.019   bin    1.1 GB   2018-06-12 17:24:41
1eZfY4qn3Ol6w1BFafQn6YDy1uOU82NNA   DSC003.020   bin    1.1 GB   2018-06-12 17:21:46
1x-P84Jq1cyuJCW2Opvy4m_qOjOHvAKtA   DSC003.021   bin    1.1 GB   2018-06-12 17:27:16
1O4TjR8Cl31A5qxHkyVmhmukp4dofCO3t   DSC003.025   bin    1.1 GB   2018-06-12 17:36:00

informação relacionada