Я могу использовать sed для рекурсивного поиска и замены строки в группе файлов. Вот так:
find -name "*.py" -not \( -name .svn -prune \) -type f -print0 | xargs
-0 sed -i 's/cat/dog/g'
Однако есть ли способ искать строку как внутри файла, так и в фактических именах файлов?
Если строка находится в имени файла, замените строку в имени файла новой строкой.
Если строка находится внутри фактического файла, замените строку новой строкой.
И, конечно, рекурсивный поиск.
Любые идеи?
Я не знаю, как сделать это за один раз, но это легко сделать с помощью небольшого скрипта, например (слегка проверено):
find -name "*.py" -not \( -name .svn -prune \) -type f -print0 \
| while read -r -d $'\0' filename; do
sed -i 's/cat/dog/g' "$filename"
echo "$filename" | grep -q "cat" \
&& mv "$filename" "${filename/cat/dog}"
done