Bash скрипт неожиданно удаляет файлы - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть скрипт, который я запускаю, чтобы переименовать все файлы в папке в «1.png», «2.png» и т. Д., Но иногда он полностью удаляется (или перемещает файл в другое место,понятия не имею, что происходит) первые 10 или около того изображений.Это происходит, когда в папке более 10 изображений.Сценарий, который я запускаю ниже, у кого-нибудь есть идеи?

#!/bin/bash
cd "$1"
cnt=1
for fname in *
do
if [ "$1" != '/var/www/cydia.stumpyinc.com/theme/images/browse/icons/' ]
then
    mv "$fname" ${cnt}.png
    cnt=$(( $cnt + 1 ))
fi
done

EDIT

Я также получаю эту ошибку в терминалезнаю, важно это или нет, хотя

mv: cannot stat `*': No such file or directory

1 Ответ

2 голосов
/ 16 ноября 2011

Ваш сценарий причудлив: из вашего описания правильный способ переименования всего в число должно выглядеть примерно так:

#!/bin/bash


error() {
    ec=$1
    shift;
    echo "$@" 1>&2
    exit $ec
}

TARGETDIR="$1"

if [ ! -d $TARGETDIR ] ; then
     error 1 "$TARGETDIR: No such directory"
fi

if [ "$TARGETDIR" = '/var/www/cydia.stumpyinc.com/theme/images/browse/icons/' ] ; then
     error 1 "Cannot process $TARGETDIR"
fi

# Okay let's process stuff now...


cd $TARGETDIR
if [ "$(echo *)" = "*" ] ; then
     error 1 "$TARGETDIR: empty directory"
fi

# calculate zero-padding for the number of files present.

zeros=$(ls -1 | wc -l | wc -c)
cnt=1
for k in * ; do 
    if [ -f "$k" ] ; then
          ext=."$(echo $k | awk -F\\. '{ printf $NF }')"
          fn=$(printf "%0${zeros}d" $cnt)
          echo "Converting $k to ${fn}${ext}"
          mv "$k" "${fn}${ext}"
          cnt=$(($cnt+1)) 
    fi
done
...