Список отсутствующих имен файлов в шаблоне

Список отсутствующих имен файлов в шаблоне
  1. У меня много файлов, которые начинаются с цифр, а затем через дефис идут описания. Например:

    001 - awesomesauce
    216 - stillawesomesauce
    
  2. Они организованы по подкаталогам

Итак, как бы я, используя bashскрипт или какой-то встроенный инструмент, заглянул внутрь этих каталогов, чтобы увидеть, не пропустил ли я номер по порядку? То есть, сообщил бы, что я пропустил 002, 128, и т. д. в приведенном выше примере. Я знаю, что могу, ls {000..216}\ -*и он выведет список файлов и выдаст ошибку, если не найдет их, но есть ли лучший способ получить ТОЛЬКО пропущенные файлы и сделать это рекурсивно?

решение1

В gnuнастройке вы можете запустить:

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[@]})

В качестве альтернативы, zshвы можете попробовать что-то вроде этого:

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

Он извлекает числа (первые три цифры) из каждого имени файла, сортирует их и сохраняет результат в массиве - myarr. Затем он устанавливает другой массив - mynumsсодержащий числа от 001до значения последнего индекса (т.е. наибольшее число, извлеченное из имен файлов), а затем используетрасширение параметрадля удаления значений myarrиз расширения mynums.

решение2

Я написалfindmissingскрипт Pythonкоторый делает это. Я разработал его на macOS, но он должен работать на любой платформе. Я протестировал его запуск с Python 2.7 и 3.6.

Вот пример моего сценария в действии:

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

...выводится при предоставлении следующего файла:

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

Связанный контент