我一直在找这样一个批量重命名脚本: 原扩展名不变, 文件名从小到大, 以01, 02这种数字排序命名. 这么简单的功能却一直没找到相应的脚本, 只好自己写了一个, 可以预览, 没有覆盖危险, 并可以自动判断位数, 如下:

#!/bin/sh

NUM=1
TOTAL_NUM=$[`ls -l |grep ^- |wc -l` - 1]
LENGTH=`echo $TOTAL_NUM |awk '{print length($0)}'`

if [ "$1" == "-f" ]
then
	TEMP_DIR=`mktemp -d .tmp.XXXXXXXXXX` || exit 1
fi

for orig in `ls -S -r`
do
	if [ ! -f "$orig" ]
	then
		continue
	fi
	EXT=${orig##*.}
	echo ""`printf %0.${LENGTH}d $NUM`.$EXT"   <--   "$orig""
	if [ "$1" == "-f" ]
	then
		mv "$orig" "${TEMP_DIR}/`printf %0.${LENGTH}d $NUM`.$EXT"
	fi
	NUM=$[$NUM + 1]
done

if [ "$1" == "-f" ]
then
	mv ${TEMP_DIR}/* ./
	rmdir $TEMP_DIR
else
	echo
	echo "Use $(basename "$0") -f to make it effective"
	echo
fi

exit 0

PS: Win下可以用Total Commander中的批量重命名功能, 全平台包括Linux的可以选Métamorphose 2, 暂时只发现这两个软件可以满足我的需求, 但是一个懒得Wine, 一个嫌功能太多而且体积有点大.