LINUX.ORG.RU
ФорумAdmin

Рекурсивный обход каталога и перекодировка всех .txt

 


0

1

параметры скрипта это $1=ключ(для режима защиты, может и не быть), $2=каталог $3=из какой кодировки $4=в какую. Скрипт зацикливается, а если поставить break после строки «while true; do» просто не работает. Не могу разобраться как довести до ума.

if [ $1 = "-p" ] 
then key="1"; shift
else key="0"
fi

cd $1

find . -f ext3 -name '*.txt' -ls 2> /dev/null | 
while read a ; do
    if [ $key = "1" ]; then 
        while true; do
            read -p "Are you sure to encode file" $a "[y/n] ?" yn
            case $yn in
                [Yy]* ) iconv -f $2 -t $3 $a -o $a;;
                [Nn]* ) echo $a "-file wasn't encoded";;
                * ) echo "Please answer yes or no.";;
            esac
        done
    else 
        iconv -f $2 -t $3 $a -o $a
    fi
done
fi

Ответ на: комментарий от evilface

Пробовал вот-так, но тоже не получилось

find . -iname "*.txt"| while read a ; do
    if [ $key = "1" ]; then 
        while true; do	break
            read -p "Are you sure to encode file [y/n] ?" yn
            case $yn in
                [Yy]* ) iconv -f $2 -t $3 $a -o $a;;
                [Nn]* ) echo $a "-file wasn't encoded";;
                * ) echo "Please answer yes or no.";;
            esac
        done
    else
        iconv -f $2 -t $3 $a -o $a
    fi
continue
done

timas-cs
() автор топика
Ответ на: комментарий от timas-cs
find . -iname "*.txt" -exec \
sh -c 'if [ $key = "1" ]; then iconv -f $2 -t $3 {} -o {}; \
else do something else;fi' \;

Как-то так не подходит? Надо проверить.

conformist ★★★
()
Последнее исправление: conformist (всего исправлений: 2)

самопальное подтверждение можно заменить на -ok

if [ "$1" = "-p" ]; then
    act="-ok"; shift
else
    act="-exec"
fi

cd "$1"

find . -name '*.txt' $act iconv -f "$2" -t "$3" {} -o {} \;

anonymous
()
Ответ на: комментарий от timas-cs

есть вариант 2, но проблемы те же

find . -f -name '*.txt' | while read a ; do
 if [ $key = "1" ]; then
        unset yn 
        while ! [[ "${yn:-1}" == [YyNn] ]] ; do
            [ "$yn" ] && echo "Please answer [y]es or [n]o"
            read -n1 -p "Are you sure to encode file [y/n] ?" yn
        done
        case $yn in
            [Nn]* ) echo $a "-file wasn't encoded"
                    continue;;
        esac
     fi
     iconv -f $2 -t $3 $a -o $a
done
fi

timas-cs
() автор топика

И man find почитай. Ты похоже копипастишь не понимая значения параметров.

ashot ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.