![Listar nomes de arquivos ausentes em um padrão](https://rvso.com/image/109253/Listar%20nomes%20de%20arquivos%20ausentes%20em%20um%20padr%C3%A3o.png)
Tenho muitos arquivos que começam com números e depois são hifenizados com descrições. Por exemplo:
001 - awesomesauce 216 - stillawesomesauce
Eles são organizados por subdiretório
Então, como eu usaria bash
um 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 gnu
configuraçã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 - mynums
contendo números até 001
o 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 myarr
da expansão de mynums
.
Responder2
escrevifindmissing
um 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