Здравствуйте старожилы, очень сильно нуждаюсь в Bash скрипте. Данный скрипт должен найти определённую строку во всех .txt файлах, всех каталогов и подкаталогов (то есть полностью во всех папках). И заменить ее на мной указанную.
В моем случае поиск будет происходить по пути: /volume1/test
Заменить нужно 192.168.1.56 на 192.168.178.111
Папки (в которых будет происходить поиск текстовых файлов) могут содержать и русские названия, кроме того имеются в названиях как символы так и пробелы. Если конечно это важная информация.
Пример пути: \volume1\test\_Фильмы\007-001 Доктор Ноу\007-001 Доктор Ноу
Применение данного скрипта помогло частично:
#!/bin/sh
for i in `find "/volume1/test" -depth -name "*.txt" -exec grep -H "192.168.1.56" {} \; | awk -F ":" '{print $1}' | xargs`;
do sed -i 's/192.168.1.56/192.168.178.111/g' $i;
done
возможно в силу специфики аппарата для которого пишется данный скрипт.
Аппарат: Synology DS1813+
Не происходит полный поиск и замена во всех подкаталогах и во всех txt файлах. Хотя скрипт запускается от root.
Для того чтобы видеть картину целяком прикрепляю результаты теста скрипта написанного выше:
Сформировал подробный отчет в виде изображения ниже:
Прикрепляю архив в котором находятся файлы, которые мной использовались для тестирования (6,19 МБ):
В данном архиве находится каталог для которого в конечном итоге данный скрипт должен быть задействован (483 МБ):
Каталог для которого будет применятся скрипт
В случае тестирования распакуйте любой из архивов в корень папки.
Вроде как объяснил более чем доступно, спасибо всем откликнувшимся. Прошу помощи так как сам не располагаю достаточным количеством знаний в написании Bash скриптов. И только приобретаю опыт.