У меня есть каталог файлов разметки, с которым я пытаюсь выполнить следующее:
- Захватите имя файла уценки и сохраните его в переменной
- Возьмите эту переменную и замените ряд строк в файле на сохраненную переменную имени файла
- перебрать все файлы в каталоге и сделать то же самое
Я близок, но следующий код вытаскивает имя файла только первого файла уценки и применяет переменную ко всем строкам в файлах. Вот мой рабочий код:
#!/bin/bash
for file in /home/user/dir/*; do
str="somestring"
filename=$(basename $file)
fn="$(echo "${filename%.*}")"
find ./ -type f -exec sed -i '' -e "s/${str}/${fn}/g" {} \;
done
Предполагается, что файл уценки выглядит так:
123456789.md
и находится по адресу /home/user/dir/123456789.md
с несколькими другими файлами .md с другими случайными числовыми именами.
Структура файлов .md похожа на:
---
layout: default
date: 2010-03-28
original: /orig/somestring.jpg
thumbnail: /thumb/somestring_thumb.jpg
permalink: /images/somestring/
---
и моя цель - сделать так, чтобы каждый файл выглядел так, основываясь на имени файла самого файла .md:
---
layout: default
date: 2010-03-28
original: /orig/123456789.jpg
thumbnail: /thumb/123456789_thumb.jpg
permalink: /images/123456789/
---
Есть какие-нибудь мысли о том, как лучше всего отредактировать вызов sed или как написать это? Иногда в моем тестировании sed возвращал sed: RE error: illegal byte sequence
, но в любом случае проходил переименование строки, даже если это была неправильная строка.