Если вы хотите прочитать имена файлов из файла и сообщить о пропущенных именах в этом списке:
awk '{ name = sprintf("%03d.pdf", ++n) }
{ while ($0 != name) {
printf("Missing file %s\n", name)
name = sprintf("%03d.pdf", ++n)
} }' <file
Учитывая файл
001.pdf
002.pdf
005.pdf
007.pdf
008.pdf
Это сгенерирует
Missing file 003.pdf
Missing file 004.pdf
Missing file 006.pdf
Предполагая, что вы хотите найти отсутствующих файлов в последовательности с bash
, где каждое имя файла должно соответствовать шаблону <3 zero-filled digits>.pdf
и где цифры должны быть между 001
и 125
:
for name in {001..125}.pdf
if [ ! -f "$name" ]; then
printf 'file "%s" is missing\n' "$name" >&2
fi
done
или с /bin/sh
:
i=1
while [ "$i" -le 125 ]; do
name=$( printf '%03d.pdf' "$i" )
if [ ! -f "$name" ]; then
printf 'file "%s" is missing\n' "$name" >&2
fi
i=$(( i + 1 ))
done
Итерируется с i
, принимая значения от 1 до 125. Ожидаемое имя файла создается с использованием printf
и спецификации формата %03d.pdf
. %03d
- это заполнитель для значения, которое будет преобразовано в «десятичное целое число, заполненное нулями» (для этого значения будет использоваться $i
).
Если ожидаемое имя файла не существует как обычный файл, сообщение печатается со стандартной ошибкой.
Использование ksh93
:
for name in {1..125%03d}.pdf
if [ ! -f "$name" ]; then
printf 'file "%s" is missing\n' "$name" >&2
fi
done