pdftk К сожалению, больше не является открытым исходным кодом. (Это долгая история.)
Обычный gs двигатель может это сделать, хотя:
gs -sDEVICE=pdfwrite \
-sPageList=odd \
-sOutputFile=odd.pdf \
-dBATCH -dNOPAUSE \
file.pdf
Затем замените «нечетные» на «четные», чтобы выбрать четные страницы.
(В вашем вопросе сказано, что «файлы, которые существуют» в одном месте, и «файлы, которых нет» в другом, поэтому я не был уверен, какой из них вам нужен.)
Чтобы получить те, которые действительно существуют, вы можете использовать расширенный glob в Bash:
$ shopt -s nullglob
$ echo File.Number.@([1-9]|10).txt
File.Number.10.txt File.Number.1.txt File.Number.7.txt File.Number.9.txt
Параметр shopt -s nullglob
включает параметр bash nullglob
, чтобы ничего не возвращалось, если нет файлов, соответствующих шаблону. Без него шарик без совпадений расширяется до самого себя.
Или, проще говоря, числовой диапазон в Zsh:
% echo File.Number.<1-10>.txt
File.Number.10.txt File.Number.1.txt File.Number.7.txt File.Number.9.txt
Цикл тоже не так уж и плох, и позволяет находить файлы, которые не не существуют, намного лучше, чем глобус:
$ a=(); for f in File.Number.{1..10}.txt; do [ -f "$f" ] || a+=("$f"); done
$ echo "these ${#a[@]} files didn't exist: ${a[@]}"
these 6 files didn't exist: File.Number.2.txt File.Number.3.txt File.Number.4.txt File.Number.5.txt File.Number.6.txt File.Number.8.txt
В zsh
, чтобы сократить список до элементов, которые ссылаются на существующие записи в данном каталоге, вы могли бы сделать:
dir=/some/dir
list=(File.Number.{1..10}.txt other-file-{a,b}.txt)
existing_in_dir=($dir/$^list(N:t))
non_existing=(${list:|existing_in_dir})
Список существующих файлов представляет собой просто расширение глобуса:
var=$( printf '%s\n' File.Number.[0-9].txt File.Number.[0-9][0-9].txt )
Список несуществующих становится немного длиннее, в bash:
comm -13 <(echo "$var" | sort) <(printf '%s\n' File.Number.{1..10}.txt | sort)
Это будет работать, если имена файлов не содержат символов новой строки.
Первая часть просто перечисляет имена файлов в pwd, которые содержат одну или две цифры между File.Number.
и .txt
Вторая часть просто воссоздает полный список искомых файлов.
Команда comm -13
даст дополнение списка 1 в списке 2 (элементов в наборе 1, которых нет в наборе 2 ).