Listar los nombres de archivos que faltan en un patrón

Listar los nombres de archivos que faltan en un patrón
  1. Tengo muchos archivos que comienzan con números y luego están separados por guiones con descripciones. Por ejemplo:

    001 - awesomesauce
    216 - stillawesomesauce
    
  2. Están organizados por subdirectorio.

Entonces, ¿cómo podría usar bashun script o alguna búsqueda integrada dentro de esos directorios para ver si me falta un número en orden? Es decir, informar que me faltan 002, 128, etc. en el ejemplo anterior. Sé que puedo ls {000..216}\ -*y enumerará los archivos y arrojará un error si no los encuentra, pero ¿hay una mejor manera de obtener SÓLO los archivos que faltan y hacerlo de forma recursiva?

Respuesta1

En una gnuconfiguración podrías ejecutar:

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, con zsh, puedes probar algo como esto:

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

Extrae los números (los primeros tres dígitos) de cada nombre de archivo, los ordena y guarda el resultado en una matriz - myarr. Luego establece otra matriz, mynumsque contiene números desde 001hasta el valor del último índice (es decir, el número más alto extraído de los nombres de los archivos) y luego usaexpansión de parámetrospara eliminar los valores myarrde la expansión de mynums.

Respuesta2

escribífindmissingun script en Pythoneso hace esto. Lo desarrollé en macOS pero debería funcionar en cualquier plataforma. Probé ejecutarlo con Python 2.7 y 3.6.

Aquí hay una muestra de mi guión en acción:

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

...se genera cuando se proporciona el siguiente archivo:

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

información relacionada