У меня есть каталог с именами файлов шаблонов. В них есть одно значение, которое нужно заменить. Я хотел нетронутую папку с ключевым словом в месте замены в каждом файле. Я хотел заменить слово и вывести все файлы в новую папку с файлами, названными так же, как ввод. Команда, которую я нашел здесь:
find . -name '*.sql' -i -exec sed -e 's/TEXTTOSUBSTITUTE/SUBSTITUTIONTEXT/g' {} \;
Как я могу получить эту команду для вывода файлов в другой каталог и оставить оригиналы без изменений? большое вам спасибо за вашу помощь! Я хочу, чтобы исходные файлы остались без изменений. папка называется Templates, а папка в том же каталоге, что и каталог Templates, называется Usefiles. Файлы шаблонов действуют как базовые файлы и поэтому не должны изменяться. Полагаю, я мог бы использовать приведенное выше предложение, но сделать две отдельные команды поиска, одну для копирования, а другую для sed в новом каталоге ОБНОВЛЕНИЕ >>>> Я пробовал предложения, но sed, кажется, не работает , Копия работает, но sed является переменной и выходит пустым в сценарии. Вот мой ток, и еще раз спасибо !! :
#!/bin/bash
echo "Enter Year i.e. 2020"
read -p reportyear
echo "Enter Month i.e. 04"
read -p reportmonth
SUBSTITUTIONTEXT=$reportyear/$reportmonth
find MOT/ -name '*.sql' -exec sh -c 'for f; do
echo cp -v "$f" MOU/ && echo sed -ie "s/TEXTTOSUBSTITUTE/$SUBSTITUTIONTEXT/g" MOU/"${f##*/}"
done' _ {} +
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ Спасибо вам, ребята, рабочее решение:
echo "Enter Year i.e. 2020"
read reportyear
echo "Enter Month i.e. 04"
read reportmonth
SUBSTITUTIONTEXT=$reportyear\/$reportmonth
cd /to/relevant/files
find MOT/ -name '*.sql' -exec sh -c 'for f; do
cp -v "$f" MOU/ && sed -i 's@SUBSTITUTIONYEARMONTH@"$SUBSTITUTIONTEXT"@' MOU/"${f##*/}"
done' _ {} + > /dev/null 2>&1