Tengo muchos archivos que comienzan con números y luego están separados por guiones con descripciones. Por ejemplo:
001 - awesomesauce 216 - stillawesomesauce
Están organizados por subdirectorio.
Entonces, ¿cómo podría usar bash
un 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 gnu
configuració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, mynums
que contiene números desde 001
hasta 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 myarr
de la expansión de mynums
.
Respuesta2
escribífindmissing
un 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