Как конвертировать все pdf-файлы в текст (внутри папки) с помощью одной команды?

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

$ pdftotext filename.pdf

Но есть ли одна команда, которая сделает это преобразование без указания отдельных имен файлов, чтобы конвертировать торговый центр?

Я вижу здесь, в Википедии, что «Wildcards (*), например $ pdftotext * pdf, для преобразования нескольких файлов не может использоваться, потому что pdftotext ожидает только одно имя файла.»

1
задан 5 November 2012 в 00:41

4 ответа

ls *.pdf | xargs -n1 pdftotext

xargs часто является быстрым решением для запуска одной и той же команды несколько раз с небольшим изменением каждый раз. Опция -n1 гарантирует, что только один PDF файл передается pdftotext в то время

Edit. : Если вы беспокоитесь о пространствах в именах файлов и таким образом, вы можете использовать эту альтернативу: [d1 ]

find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext
6
ответ дан 25 May 2018 в 04:43
  • 1
    см. мой ответ: может ли эта команда быть адаптирована, чтобы избежать упомянутой проблемы? это не означает, что ваше решение не является хорошим, напротив, оно делает что-то очень конкретное, что другие альтернативы здесь нет. но мне было просто любопытно – cipricus 19 November 2012 в 05:22
  • 2
    Альтернативно: ls *.pdf | xargs -L1 -I% pdftotext % %.txt – kenorb 1 August 2014 в 14:18

напишите сценарий bash

for f in *.pdf; do
  pdftotext "$f"
done

или введите его в однострочной команде следующим образом:

for f in *.pdf; do pdftotext "$f"; done

Надеюсь, это поможет , У меня нет большой группы .pdfs, чтобы проверить это, но я использую эту стратегию для преобразования моих .flac-файлов в .ogg-файлы.

2
ответ дан 25 May 2018 в 04:43
  • 1
    можно ли это сделать, открыв терминал в этой папке и запустив команду вместо того, чтобы вставить путь вручную? – cipricus 5 November 2012 в 00:39
  • 2
    не могли бы вы вставить его здесь как таковой и вставить в свой ответ? это было бы хорошим ответом. я не смог достичь хорошей формулы, просто удалив часть того, что вы опубликовали – cipricus 5 November 2012 в 01:08
  • 3
    находка и xargs, которые я изначально предлагал, не работали, когда у меня была возможность проверить их. – cprofitt 5 November 2012 в 02:01

Я должен сначала поблагодарить Сэма и Райана Томпсона всем остальным ответчикам, поскольку мой ответ здесь не что иное, как вариант, связанный с возможностью добавления своих решений к пользовательским действиям Thunar:

поэтому, как и любая команда терминала, команда для преобразования в текст всех файлов PDF в папке может быть помещена в список пользовательских действий в файловом менеджере Thunar

enter image description here [ ! d5]

Команда есть find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext, (исходя из Sam ), это тот, который я предпочитаю использовать, но он имеет (d12)

... это забавная команда, которая будет использоваться с осторожностью: он преобразуется в текст всего pdf в папке, где он запущен, поэтому, если он был запущен по ошибке в домашней папке, он будет иметь некоторые нежелательные эффекты: все ваши pdf-файлы будут преобразованы в текст! [ ! d16]

(я протестировал его так: создала на рабочем столе папку под названием «test», а в ней файл PDF и ряд папок в папках (/Desktop/test/a/b/c/e/f/g/h/i), каждая из которых в том же формате. Запуск этой команды в /Desktop/test преобразовал все pdf-файлы в папку «i».)

(Я бы приветствовал комментарии о том, как настроить эту команду, чтобы избежать этого риска.) [!d18 ]

Заменяя это на другой (for file in *.pdf; do pdftotext "$file" "$file.txt"; done), исходящий от Сэма, проблему избегают.

Но в некоторых случаях можно пожелать, как это делает решение Райана!

0
ответ дан 25 May 2018 в 04:43
  • 1
    Вы можете избежать поиска команды find в подкаталогах с помощью -maxdepth 1. Кроме того, при вставке в функцию пользовательских действий Thunar вы, вероятно, должны заменить find . на find %F, чтобы позволить Thunar правильно передавать пути выбранных каталогов. – Ryan Thompson 19 November 2012 в 07:10
for file in *.pdf; do pdftotext "$file" "$file.txt"; done

Этот вывод выводит sample.pdf.txt.

Я попытался использовать этот, как и user2357111317, и я также включил sample.pdf.txt , чтобы сохранить макет текста

for file in *.pdf; do pdftotext -layout "$file"; done
0
ответ дан 25 May 2018 в 04:43

Другие вопросы по тегам:

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