при копировании файла в другой файл выдает ошибку.cp: target не является каталогом - PullRequest
0 голосов
/ 11 мая 2019

Когда я пытаюсь запустить код ниже, он выдает ошибку cp: target "Featurespath" is not a directory

Я пробовал несколько вариантов, но не работает.

Featurespath=/permanent/jag/media-*/*/print/cooked/*Features.xml
for file in $(ls $Featurespath);
do
cat $Featurespath | sed "/pB-/s/Direction=\"unidir\"/Direction=\"bidir\"/" $Featurespath > /permanent/jag/temp.xml
cp -rf /permanent/jag/temp.xml $Featurespath
rm /permanent/jag/temp.xml
done

Я хочу, чтобы модифицированный XML был вставлен в тот же XML-файл.

1 Ответ

1 голос
/ 11 мая 2019

Ошибка, которую вы получили из-за строки cp: bash раскрывает $Featurespath в список файлов. Когда cp видит более 2 параметров, предполагается, что последний параметр является каталогом, чего в данном случае нет. Вот мое предлагаемое исправление:

Featurespath=/permanent/jag/media-*/*/print/cooked/*Features.xml
for file in $Featurespath
do
    sed "/pB-/s/Direction=\"unidir\"/Direction=\"bidir\"/" "$file" > /permanent/jag/temp.xml
    mv -f /permanent/jag/temp.xml "$file"
done

Примечания

  • Не использовать ls: bash может очень просто расширять символы подстановки
  • В цикле вы имеете дело с отдельными файлами $file, а не со списком файлов $Featurespath
  • Не нужно использовать команду cat, команда sed может принимать имя файла
  • sed имеет встроенную опцию редактирования, которая устраняет необходимость во временном файле. Возможно, вы захотите посмотреть на это.
  • Заменить cp / rm комбинацию на mv
  • В конечном счете, как уже говорили другие, sed не является подходящим инструментом для редактирования содержимого XML, но он может работать для простых случаев
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...