批量重命名脚本
我一直在找这样一个批量重命名脚本: 原扩展名不变, 文件名从小到大, 以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, 一个嫌功能太多而且体积有点大.