Bash脚本意外删除文件

时间:2011-11-16 02:19:27

标签: bash mv

我有这个脚本,我正在运行以将文件夹中的所有文件重命名为" 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

1 个答案:

答案 0 :(得分: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