Обратный порядок обработки файлов PDF

Попробуйте сделать так:

cat... | sed -n '/^>/ { s/.*description: *//; s/\[.*//; p; }'

(Не проверено, так как я на мобильном телефоне.)

Есть более изящные способы; например, цикл Awk был бы наиболее гибким.

0
02.11.2020, 01:41
3 ответа

В zshэто будет просто:

qpdf --empty --pages./*.pdf(On) -- output.pdf

Где On— это квалификатор глобуса order расширение глобуса в обратном (заглавном O, нижний регистр — прямой )порядок по name.

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

qpdf --empty --pages./*.pdf(nOn) -- output.pdf

Сравните:

$ print -r./*.pdf(On)
./file3.pdf./file2.pdf./file1.pdf./file11.pdf./file10.pdf
$ (LC_ALL=C; print -r./*.pdf(On))
./file3.pdf./file2.pdf./file11.pdf./file10.pdf./file1.pdf

(в лексическом порядке file10.pdfстоит перед file2.pdfи даже перед file1.pdfв локалях, где пунктуация (здесь.)игнорируется в первом приближении при сравнении строк ).

С:

$ print -r./*.pdf(nOn)
./file11.pdf./file10.pdf./file3.pdf./file2.pdf./file1.pdf

file10.pdfидет после file3.pdf, потому что с nпоследовательности десятичных цифр сравниваются численно (, что похоже на то, что делается GNU ls -vили GNUsort -V).

3
18.03.2021, 22:53

(Для оболочки GNU bash)

Вы можете использовать tac, чтобы перевернуть список аргументов, идущих к xargs. Для команды qpdf, которую вы запускаете, мы должны объединить еще два аргумента:--и out.pdfв конце.

Здесь используется новая строка в качестве разделителя аргументов, что означает имена файлов с новыми строками не обрабатываются:

printf "%s\n" "out.pdf" "--" *.pdf | tac | xargs -d'\n' qpdf --empty --pages

А здесь для любых имен файлов с использованием нулевого разделителя:

printf "%s\0" "out.pdf" "--" *.pdf | tac -s $'\0' | xargs -0 qpdf --empty --pages

Я протестировал (оболочку GNU Bash в Linux ), она объединила файлы в ожидаемом обратном порядке.

1
18.03.2021, 22:53

Вы можете использовать ответы наКак изменить аргументы оболочки? , чтобы обратить вспять то, во что расширяется *.pdf. Сначала сохраните это как позиционные параметры оболочки:

set -- *.pdf

Затем используйте любой хороший ответ на связанный вопрос. Я выбираю этот:

flag=''; for a in "$@"; do set -- "$a" ${flag-"$@"}; unset flag; done

Теперь "$@"расширяется до того, что вы хотите. Используйте его с желаемой командой:

qpdf --empty --pages "$@" -- out.pdf

Если вы не хотите терять старые позиционные параметры, запустите три команды в подоболочке.

1
18.03.2021, 22:53

Теги

Похожие вопросы