0

フォルダ内のすべてのファイルの名前を「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

編集

ターミナルでもこの​​エラーが発生しますが、それが重要かどうかはわかりませんが

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

1 に答える 1

2

スクリプトは奇妙です。説明から、すべての名前を数字に変更する正しい方法は、次のようになります。

#!/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
于 2011-11-16T02:40:16.217 に答える