команда linux объединяет pdf-файлы с числовой сортировкой

Я пытаюсь написать сценарий bash, чтобы объединить все pdf-файлы каталога в один pdf-файл. Команда pdfunite *.pdf output.pdf успешно достигает этого, но он объединяет входные документы в регулярном порядке:

1.документ pdf 10.документ pdf 11.документ pdf 2.документ pdf 3.документ pdf 4.документ pdf 5.документ pdf 6.документ pdf 7.документ pdf 8.документ pdf 9.формат PDF

в то время как я хотел бы, чтобы документы были объединены в числовом порядке:

1.документ pdf 2.документ pdf 3.документ pdf 4.документ pdf 5.документ pdf 6.документ pdf 7.документ pdf 8.документ pdf 9.документ pdf 10.документ pdf 11.формат PDF

Я думаю, что команда смешивание ls -v или sort -n и pdfunite сделал бы трюк, но я не знаю, как их объединить. Любая идея, как я могу объединить PDF файлы с числовой сортировки?

большое спасибо за любую помощь

2 ответов


вы можете встроить результат команды, используя $(), таким образом, вы можете сделать следующее

$ pdfunite $(ls -v *.pdf) output.pdf

или

$ pdfunite $(ls *.pdf | sort -n) output.pdf
обратите внимание, что это не работает, когда имя файла содержит специальные символы, такие как пробелы.

в этом случае вы можете сделать следующее:

ls -v *.txt | bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'

хотя это кажется немного сложным, его просто сочетание

обратите внимание, что вы не можете использовать xargs С pdfunite требует ввода pdf в качестве середины аргументов. Я избегал использовать readarray так как он не поддерживается в старой версии bash, но вы можете использовать его вместо IFS=.. read -ra .. если у вас есть новый bash.


сделать это в несколько шагов. Я предполагаю, что у вас есть файлы от 1 до 99.

 pdfunite $(find ./ -regex ".*[^0-9][0-9][^0-9].*"  | sort) out1.pdf
 pdfunite out1.pdf $(find ./ -regex ".*[^0-9]1[0-9][^0-9].*"  | sort) out2.pdf
 pdfunite out2.pdf $(find ./ -regex ".*[^0-9]2[0-9][^0-9].*"  | sort) out3.pdf

и так далее.

окончательный файл будет состоять из всех ваших PDF-файлов в числовом порядке.

!!! Остерегайтесь записи выходного файла, такого как out1.pdf etc. в противном случае pdfunite перезапишет последний файл !!!

изменить: Извините, что я пропустил [^0-9] в каждом регулярном выражении. Исправлено это в приведенных выше командах.