Извлечение чисел и поиск пропущенных чисел в именах файлов - PullRequest
1 голос
/ 24 марта 2020

В bash у меня есть папка, содержащая некоторые подпапки и файлы как

folder1/
folder2/
script_1.ext
script_2.ext
script_4.ext
...
script_N.ext

, где N - известное большое число. Я хотел бы знать, какие числа отсутствуют в именах файлов. Я пытаюсь придумать простые коды, которые я могу извлечь числа из имен файлов (в примере это 1,2,4, ..., N) и найти пропущенные числа в 1: N (например, 3) .

Я очень новичок в bash скриптах. Я пытался найти похожие вопросы и ответы, но не смог. Любой вклад будет оценен!

пс. Я попытался

ls -1 | sed 's/script_//' | sed 's/.ext//'

и успешно извлек цифры, но я не уверен, как сохранить эти цифры и сравнить с 1, ..., N, чтобы получить пропущенные числа.

Ответы [ 2 ]

1 голос
/ 24 марта 2020

В основном я хочу найти числа в 1, ..., N для известного N , которых нет в именах файлов.

Предполагается file_ и .ext являются общими шаблонами для ваших файлов; l oop через 1 до N, создайте имена файлов, проверьте их существование и сообщите, если они отсутствуют.

N=10 # known N
for ((i=1;i<=N;i++)); do
  f=file_$i.ext
  if [ ! -f "$f" ]; then
    printf '%s is missing\n' "$f"
  fi
done
0 голосов
/ 24 марта 2020

Извлечение чисел в порядке. Сравнение с 1..N можно сделать следующим образом.

Если предположить, что числа находятся в диапазоне 1..100:

diff <(ls -1 | sed 's/script_//' | sed 's/.ext//' | sort -n) <(echo "$(seq 1 100)") | sed -n 's/> //p'

Или если верхняя граница меньше 10:

diff <(ls -1 | sed 's/script_//' | sed 's/.ext//') <(echo "$(seq 1 9)") | sed -n 's/> //p'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...