find . -type f -name '*.txt' -exec sh -c '
for file; do
if newname=$(grep -m1 "specific text" "$file"); then
echo mv -i "$file" "${file%/*}/${newname}.txt"
fi
done
' sh {} +
Переименовывает только файлы, соответствующие шаблону grep
. Расширение параметра ${file%/*}
удаляет имя файла из пути и оставляет часть каталога $file
, а опция -i
предлагает перезаписать уже существующий файл.
Если выходные данные выглядят как ожидалось, удалите echo
перед mv
и еще раз введите команду для переименования файлов.