Вот решение, которое обрабатывает даже новые строки:
find -name '*.[ch]' \
-exec mv '{}' '{}.backup' \; \
-exec iconv -f ISO-8859 -t UTF-8 '{}.backup' -o '{}' \;
Как правило, НИКОГДА не анализируйте имена файлов, если вы собираетесь использовать результаты.Единственные вменяемые способы, о которых я знаю, это
- Используйте оболочки-оболочки, например
for file in ./*.[ch] ; do echo "$file" ; done
.Работает только для одного каталога. - Использовать поиск в сочетании с -exec
- Использовать поиск в сочетании с -print0 (который печатает имена файлов как строки, разделенные \ 0) и использовать выходные данные для построениякомандные строки с
xargs -0
и, вероятно, вспомогательный скрипт.Это довольно громоздко, однако.
Кроме того, убедитесь, что к относительным именам файлов, которые вы используете, добавлен префикс ./
.Вызов mv -from -to
небезопасен, но mv ./-from ./-to
есть и делает то, что вы хотите.Например, когда вы теретесь, используйте ./*.c
вместо *.c
.