Как насчет:
for file in *.php3
do
sed 's/\.php3/.php/g' $file > ${file%3}
done
Цикл for / do / done обрабатывает каждый файл .php3 по очереди, редактирует файл и заменяет каждую строку .php3
на .php
, а также копирует файл из чего-то .php3 в нечто .php.
Добавлено для измененного вопроса:
for file in $(find . -type f -name '*.php3' -print)
do
sed 's/\.php3/.php/g' $file > ${file%3}
done
В наши дни '-print
' обычно можно опустить, но исторически много машинного времени было потрачено впустую людьми, которые забыли добавить его, потому что изначально (до POSIX) не было никаких действий по умолчанию.
Этот фрагмент о самой простой модификации исходного кода для выполнения расширенной задачи, но не обязательно является лучшим способом сделать это больше - он предварительно генерирует весь список файлов перед обработкой любого. Вместо этого вы можете использовать:
find . -type f -name '*.php3' -print |
while read file
do
sed 's/\.php3/.php/g' $file > ${file%3}
done
Однако обе исправленные версии могут столкнуться с проблемами, если имена файлов или пути могут содержать пробелы, символы новой строки или другие подобные символы. Чтобы избежать таких проблем, вы должны работать усерднее - используя Perl или (GNU find + xargs) или некоторые другие методы. Если вы в здравом уме, вы избегаете таких проблем. Если вы унаследовали менее чем вменяемые настройки, вам, возможно, придется углубиться в тайны обработки имен файлов Unix.