Listar nomes de arquivos ausentes em um padrão

4
  1. Eu tenho muitos arquivos que começam com números e 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 o script bash ou alguma aparência interna dentro desses diretórios para ver se estou perdendo um número em ordem? Ou seja relatar que estou com falta de 002 , 128 , etc. no exemplo acima. Eu sei que posso ls {000..216}\ -* e ele listará os arquivos e lançará um erro se não encontrá-lo, mas existe uma maneira melhor de obter APENAS os arquivos ausentes e fazer isso de forma recursiva?

    
por chow 08.04.2017 / 21:31

2 respostas

4

Em uma configuração de gnu , você pode 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[@]})

Como alternativa, com zsh , você pode 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 uma matriz - myarr . Em seguida, ele define outra matriz - mynums contendo números de 001 até o valor do último índice (ou seja, o maior número extraído dos nomes de arquivos) e, em seguida, usa expansão do parâmetro para remover os valores em myarr da expansão de mynums .

    
por 08.04.2017 / 23:13
0

Eu escrevi findmissing um script Python que faz isso. Eu desenvolvi no macOS, mas ele deve funcionar em qualquer plataforma. Eu testei executá-lo com o 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

... é emitido 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
    
por 02.07.2018 / 08:57