переименование pdf на основе линейного контента linux

1

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

Пока что я конвертирую в текст, а затем использую awk для печати строки 41. Но это насколько я могу.

Я пытался использовать xargs, чтобы передать вывод awk команде mv, но на сегодняшний день никаких кубиков.

Я знаю, что, вероятно, поступлю неправильно, но если все-таки смогу пролить свет, я бы это очень оценил.

Я пытаюсь это без bash, так что я могу сделать псевдоним этого между прочим.

ls *.pdf | xargs -n1 mv `ls *.pdf | xargs -n1 pdftotext; ls page_*.txt | xargs -n1 awk 'NR==41'`.txt'
byrnec25
источник

Ответы:

2

У вас есть несколько вариантов на выбор. Для этого вы можете написать функцию или сценарий оболочки (bash), который вы также можете использовать в псевдониме. И, конечно, вы можете попытаться написать одну строчку, чтобы сделать магию.

Я думаю о команде в следующей структуре (как однострочный):

for pdf in *.pdf; do pdftotext "${pdf}"; filename=`basename -s .pdf "${pdf}"`; newname=`awk 'NR==41' "${filename}.txt"`; mv "${pdf}" "${newname}"; done;`

Которые могут быть реструктурированы как:

for pdf in *.pdf
do
    pdftotext "${pdf}"
    filename=`basename -s .pdf "${pdf}"`
    newname=`awk 'NR==41' "${filename}.txt"`
    mv "${pdf}" "${newname}"
done

Этот файл может быть сохранен как сценарий оболочки и добавлен в список псевдонимов под любым именем.

Lambert
источник
Привет спасибо за ваш ответ Это выглядит очень близко. Я получаю сообщение об ошибке, которое, я думаю, связано с базовым именем -s. ---- базовое имя: неверный параметр - 's' Попробуйте basename --help' for more information. awk: cmd. line:1: fatal: cannot open file .txt 'для чтения (нет такого файла или каталога) mv: не может двигаться page_01.pdf' to ': Данный файл или каталог отсутствует
byrnec25
1
Извините, мой плохой, я забыл конечные метки в имени файла и строки нового имени. Кроме того, у меня есть базовое имя версии 8.21
Lambert
Если в вашем базовом имени нет -s, вы можете попробовать заменить строку на: `filename =" $ {pdf :: - 4} ", которая вычитает последние четыре символа (.pdf) из имени файла PDF.
Lambert
Спасибо, у меня все работает, используя базовое имя "$ {pdf}" ".pdf". Похоже, это сработает для меня. Еще раз спасибо.
byrnec25