反转命名以数字编号为基本文件名的文件
因为扫描图片要依页面来命名文件,扫描软件不支持逆序(或者叫做递减)命名的方式,所以必须要有一个操作,要么是把顺序乱的纸张排序过再扫描,要么先扫描再重新命名。如果让我来做,我选择后者,我不想给纸张重新排序
这个脚本做的事情是:1、修改文件拓展名大小写 2、反转文件名 ,如下:
$ ./rename_new.sh 100 105
第 100 页到第 105 页反转命名,共 6 页
100 --> 105
105 --> 100
101 --> 104
104 --> 101
102 --> 103
103 --> 102
#/bin/bash unset origin unset new if [ $# == 2 -a $1 -lt $2 ];then { begin=$1 end=$2 foot=`expr $end - $begin` pages=`expr $foot + 1` echo -e "第 $begin 页到第 $end 页反转命名,共 $pages 页\n" # 定义旧文件序号 for i in `seq $begin $end`;do origin=(${origin[*]} $i); # echo ${origin[*]}; done # 定义新文件序号 for j in `seq $begin $end |tac`;do new=(${new[*]} $j); # echo ${new[*]}; done # 命名语句 for rename in `seq 0 $foot`;do if [ ${origin[$rename]} == ${new[$rename]} ];then echo -e "${origin[$rename]} = ${new[$rename]} 文件无需重命名" else echo ${origin[$rename]}' -->' ${new[$rename]} fi done } else echo -e "使用方法:\n rename.sh 开始页码 结束页码\n 如 rename.sh 1 20 表示反转命名1到20页的文件\n 注意:开始页码要小于结束页码" fi
#/bin/bash # by Daniel Chow unset small unset big ext=.jpg begin=$1 end=$2 # 把所有大写转成小写 for small in `seq $begin $end`;do #echo $small; if [ -f $small.JPG ];then mv $small.JPG $small.jpg fi done # md5sum will be in next ver if [ $# == 2 -a $1 -lt $2 -a -f $1.jpg -a -f $2.jpg ];then { sum=`expr $end + $begin` pages=`expr $end - $begin + 1` mid=`expr $sum / 2` echo -e "第 $begin 页到第 $end 页反转命名,共 $pages 页\n" for small in `seq $begin $end`;do big=`expr $sum - $small` #echo $big if [ $small -le $mid -a $small -ne $big ];then { mv $big$ext var$ext echo $small' -->' $big mv $small$ext $big$ext echo $big' -->' $small mv var$ext $small$ext } else { if [ $small == $big ];then echo -e "$small is in the middle, no need to rename" fi } fi done # md5sum *.jpg >big.txt # sed -i "s/ .*//g" small.txt big.txt # tac big.txt>mid.txt # cat mid.txt >big.txt # rm mid.txt -f # diff small.txt big.txt && echo "重命名成功" } else echo -e "使用方法:\n rename.sh 开始页码 结束页码\n 如 rename.sh 1 20 表示反转命名1到20页的文件\n 注意:开始页码要小于结束页码" fi
第二版已经纠正第一版的错误,第一版不是有效的算法。使用了两个for 循环,一个是解决大小写问题(其实如果安装了rename,那变得更加简单,rename .JPG .jpg *.JPG),另一个的作用是重新命名,使用var.jpg作为中间过渡。