2011-11-16 6 views
0

フォルダ内のすべてのファイルの名前を "1.png"、 "2.png"などに変更するスクリプトがありますが、時には完全に消去(または他のファイル、私は何が起こっているか分かりません)最初の10程度の画像。これは、フォルダ内に10枚以上の画像がある場合に発生するようです。私が実行しているスクリプトは以下の通りです。予期せずファイルを削除するBashスクリプト

#!/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

一般に、良いデバッグのヒントは、あなたの "アクションコマンド"(この場合は 'mv'行)の前に' echo'を置くことで、実際にスクリプトを実行する代わりにスクリプトが出力するようにします。 –

+0

mv:ディレクトリが空であるため、 '*:No such file or directory'を取得できません。あなたの名前変更スクリプトは非常に奇妙です。下でそれを行う正しい方法を確認してください。 –

+0

私はそれが可能であるかどうかわからなかったので、おかげさまで、私はそれをデバッグし、問題が何かを知った。 '$ cnt'の先頭に先行ゼロを追加する方法を知っていますか? –

答えて

2

あなたのスクリプトは奇妙ですが、それは重要ですかどうかわからない、ターミナルでこのエラーを取得しています:あなたの説明から、すべてを数字に改名する正しい方法は、次のようなものでなければなりません:

#!/bin/bash 


error() { 
    ec=$1 
    shift; 
    echo "[email protected]" 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 
+0

うわー、それはかなりうまくいきました。先導するゼロで作業するにはちょっと微調整しなければなりませんでしたが、完璧に働いた以外はありがたいです。 –

+0

heheは微調整を共有しています。 –

+0

そこに、答えの最後に更新されたコードを追加しました –

関連する問題