Я знаю, что могу конвертировать файлы pdf в текстовые файлы один за другим, например так:
$ pdftotext filename.pdf
Но есть ли одна команда, которая могла бы выполнить это преобразование без указания отдельных имен файлов, чтобы преобразовать их все?
Я вижу здесь, в Википедии , что «подстановочные знаки (*), например, $ pdftotext * pdf, для преобразования нескольких файлов не могут использоваться, потому что pdftotext ожидает только одно имя файла».
ls *.pdf | xargs -n1 pdftotext
xargs
часто является быстрым решением для запуска одной и той же команды несколько раз с небольшим изменением каждый раз. Опция -n1
гарантирует, что только один файл PDF передается в pdftotext за один раз.
Редактировать: Если вы беспокоитесь о пробелах в именах файлов и т. П., Вы можете использовать эту альтернативу:
find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext
for file in *.pdf; do pdftotext "$file" "$file.txt"; done
Этот выводит sample.pdf.txt .
Я попытался использовать это, как предполагает user2357111317, и я также включил -layout , чтобы сохранить расположение текста
for file in *.pdf; do pdftotext -layout "$file"; done
Следующие файлы преобразуют все файлы в текущем каталоге:
for file in *.pdf; do pdftotext "$file" "$file.txt"; done
Я должен сначала поблагодарить Сэма и Райана Томпсона , а также всех остальных ответчиков - за мой ответ здесь есть не что иное, как вариант, касающийся возможности добавления их решений. к пользовательским действиям Thunar:
, поэтому, как и любая терминальная команда, команда для преобразования в текст всех PDF-файлов в папке может быть помещена в список пользовательских действий в файловом менеджере Thunar
[ 118]
Команда есть find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext
, (поступая от Райан Томпсон ) это тот, который я предпочитаю использовать, но у него неприятный ход ... см. Ниже ...
... это забавная команда, которую нужно использовать с осторожностью: она сделана для преобразования в текст всех 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
) из Сэм , проблема устранена.
Но в некоторых случаях можно было бы пожелать именно то, что делает решение Райана!
напишите скрипт bash
for f in *.pdf; do
pdftotext "$f"
done
или введите его в однострочной команде следующим образом:
for f in *.pdf; do pdftotext "$f"; done
Надеюсь, это поможет. У меня нет большой группы .pdf для тестирования, но я использую эту стратегию для преобразования моих файлов .flac в файлы .ogg.