Я пишу очень простой скрипт bash для изменения кодировки файлов .html и рекурсивно обрабатывать каталоги. Функция работает правильно только для каталога первого уровня. Можете ли вы сказать мне, где я ошибаюсь? Вот код.Простая ошибка рекурсии bash
#!/bin/bash
handleFiles() {
local REGEXP='.+\.html$'
echo $1
for f in $1/*
do
if [[ -d $f ]]
then
handleFiles "$f"
elif [[ $f =~ $REGEXP ]]
then
echo "Converting $f"
enconv -L bg -x UTF-8 "$f"
fi
done
}
# The script show all .html files in test
# enter into subdirectory but not working ..
handleFiles "test"
Вот структура каталога тест:
test$ tree
.
├── test.html
└── Untitled Folder
└── test1.html
1 directory, 2 files
Когда я запускаю скрипт я получаю следующий вывод:
./converter.sh
test
Converting test/test.html
test/Untitled Folder
Чтобы вся история, которую я после моего окончательного решения. Надеюсь, это будет полезно для кого-то с аналогичной проблемой.
#!/bin/bash
########################################################
# This bash script assume directory as a argument
# and convert all .html,js and xml files from
# windows-1251 encoding into utf-8 encoding.
# @author Georgi Naumov
# @email [email protected] for contacts and
# suggestions.
########################################################
if [[ $# -ne 1 ]] ; then
echo "Usage $0 <<directory to change encoding reqursively>>"
exit 1
fi
handleFiles() {
local REGEXP='.+\.(html|js|xml)$'
for f in "$1"/*
do
if [[ -d "$f" ]]
then
handleFiles "$f"
elif [[ "$f" =~ $REGEXP ]]
then
echo "Converting $f"
enconv -L bg -x UTF-8 "$f"
fi
done
}
handleFiles "$1"
Это упражнение или вы заинтересованы в более простой способ преобразования файлов? –
Я просто пишу это, чтобы преобразовать много файлов в один каталог, но хочу улучшить решение для обработки вложенных каталогов рекурсивными. –
Цитировать '$ f' с' '' 'для обработки каталогов с пробелами (например, Untitled Folder). – Cyrus