Как преобразовать все файлы PDF в текст (в папке) с помощью одной команды?

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

$ pdftotext filename.pdf

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

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

18
задан 4 November 2012 в 22:41

5 ответов

ls *.pdf | xargs -n1 pdftotext

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

Редактировать: Если вы беспокоитесь о пробелах в именах файлов и т. П., Вы можете использовать эту альтернативу:

find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext
0
ответ дан 4 November 2012 в 22:41
for file in *.pdf; do pdftotext "$file" "$file.txt"; done

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

Я попытался использовать это, как предполагает user2357111317, и я также включил -layout , чтобы сохранить расположение текста

for file in *.pdf; do pdftotext -layout "$file"; done
0
ответ дан 4 November 2012 в 22:41

Следующие файлы преобразуют все файлы в текущем каталоге:

for file in *.pdf; do pdftotext "$file" "$file.txt"; done
0
ответ дан 4 November 2012 в 22:41

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

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

[ 118] enter image description here

enter image description here

enter image description here

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

enter image description here

enter image description here

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

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

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

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

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

0
ответ дан 4 November 2012 в 22:41

напишите скрипт bash

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

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

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

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

0
ответ дан 4 November 2012 в 22:41

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

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