Переименование файлов XML на основе содержимого элемента - PullRequest
1 голос
/ 26 марта 2019

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

Что я пытаюсь сделать: переименовать файлы XML, чтобы они отражали содержимое элемента идентификатора.

Это точный код, который я использую:

find . -maxdepth 1 -name 'part*.xml' -exec ./rename_xml.sh {} \;

Хотя мой сценарий rename_xml выглядит следующим образом:

#!/bin/bash

id=$(xmllint --xpath '//identifier' "$1" | sed -r 's/[^"]+"([^"]+).*/\1/')
mv -v "$1" "$id.xml"

Пример исходного XML-файла выглядит следующим образом:

<root>
   <title>title</title>
   <identifier>001</identifier>
</root>

Я получаю следующее сообщение об ошибке при запуске команды find.

sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
XPath set is empty
./.xml -> .xml

Полагаю, что здесь происходят две вещи: нерабочая версия sed (недопустимая опция -r) и проблема с моим XPath. Как я могу изменить этот скрипт, чтобы он работал как положено?

1 Ответ

1 голос
/ 26 марта 2019

Хотелось бы что-нибудь подобное для тебя?

#!/bin/bash

find . -maxdepth 1 -name "part*.xml" | while read file
do
   id=$(xmllint --xpath 'string(//identifier)' $file)
   echo "mv $file $id.xml"
   mv $file $id.xml
done
...