shell脚本实现图片文件的重命名之修订版本~
2011-05-15 20:34
603 查看
还是提一下我写这个脚本的背景。
这段时间我在学习linux,发现真的还是很好用的系统。同时我在往我的QQ相册里面传图片的时候发现我的照片实在是乱的不能再乱了,而且上传的过程中每次最多只能上传300张,真的麻烦死我了,我不会windows的批处理,想到现在正在学习linux,就想到能不能写一支脚本,实现这样的功能:实现批量图片重命名,命名为固定统一的形式,并且可以按照预订的张数归档到文件夹中(也就是每个文件夹有N张照片,最后一个文件夹例外)。
经过多次发现问题,解决问题,算是完成了一个比较好的版本。
renam_sort.sh
用法:
./renam_sort.sh your_pic_path pic_n
其中your_pic_path是你放图片文件的路径(必有,否则不实现任何功能),pic_n是你预先设定的希望每个整理文件夹拥有的图片数量(可没有,只实现重命名,不实现归档整理)
源代码如下:
后来发现还是存在问题,好想是basename和dirname的问题,只要文件名中有空格就会出现问题,空格的前一部分会被dirname取走,而basename只能区到空格后面的一部分。不过只要没有空格都还是能正常的使用的。
在网上查查再修改。。。。
终于解决了,在改文件名之前先看看那些文件名中有空格,有空格的去掉就是了~
在function上面插入以下代码就OK~
欢迎交流学习~
这段时间我在学习linux,发现真的还是很好用的系统。同时我在往我的QQ相册里面传图片的时候发现我的照片实在是乱的不能再乱了,而且上传的过程中每次最多只能上传300张,真的麻烦死我了,我不会windows的批处理,想到现在正在学习linux,就想到能不能写一支脚本,实现这样的功能:实现批量图片重命名,命名为固定统一的形式,并且可以按照预订的张数归档到文件夹中(也就是每个文件夹有N张照片,最后一个文件夹例外)。
经过多次发现问题,解决问题,算是完成了一个比较好的版本。
renam_sort.sh
用法:
./renam_sort.sh your_pic_path pic_n
其中your_pic_path是你放图片文件的路径(必有,否则不实现任何功能),pic_n是你预先设定的希望每个整理文件夹拥有的图片数量(可没有,只实现重命名,不实现归档整理)
源代码如下:
#!/bin/bash #Program: # This script will help you sort your picture and rename them. #History: # 2011-05-11 Gsy v1.0 # 2011-05-15 Gsy v2.0 this edition has remove the bugs! PATH=$PATH:~/bin export PATH if [ $1 == "" ]; then echo "Usage: renamef.sh your_file_path." else function rename(){ #-lt means < and -gt means > and there are also -le and -ge means containing = if [ "$1" -lt '10' ]; then rename="IMG_0$1$2" else rename="IMG_$1$2" fi if [ "$4" == "$rename" ]; then echo "$4 Donot need to rename." else mv "$3/$4" "$3/$rename" echo $4" -> "$rename fi } count_jpeg=0 count_png=0 count_gif=0 count=0 for i in `find $1 -type f -regex '.*/./(jpg/|jpeg/)' | sort -d` do count_jpeg=$(($count_jpeg+1)) count=$count_jpeg filename=`basename $i` pathname=`dirname $i` lastname=".jpg" rename $count $lastname $pathname $filename done echo "JPEG total: $count_jpeg" for j in `find $1 -type f -regex '.*/.png' | sort -d` do count_png=$(($count_png+1)) count=$(($count+$count_png)) filename=`basename $j` pathname=`dirname $j` lastname=".png" rename $count $lastname $pathname $filename done echo "PNG total: $count_png" for k in `find $1 -type f -regex '.*/.gif' | sort -d` do count_gif=$(($count_gif+1)) count=$(($count+$count_gif)) filename=`basename $k` pathname=`dirname $k` lastname=".gif" rename $count $lastname $pathname $filename done echo "GIF total: $count_gif" echo "There is $count pictures totally" #The code under will makedir and put file into the new dir. if [ "$2" == "" ]; then echo "you should tell the script how many pictures you want each dir to hold." else dir_name=0 ready2mv=1 for l in `find $1 -type f -regex '.*/./(jpg/|png/|gif/)' | sort -d` do filename=`basename $l` pathname=`dirname $l` crl=$(($ready2mv%$2)) ready2mv=$(($ready2mv+1)) if [ "$crl" == '1' ]; then mkdir "$pathname/picdir$dir_name" echo "new directory picdir$dir_name has been make" mv "$pathname/$filename" "$pathname/picdir$dir_name/$filename" echo "$filename has been moved to picdir$dir_name" elif [ "$crl" == '0' ]; then mv "$pathname/$filename" "$pathname/picdir$dir_name/$filename" echo "$filename has been moved to picdir$dir_name" dir_name=$(($dir_name+1)) else mv "$pathname/$filename" "$pathname/picdir$dir_name/$filename" echo "$filename has been moved to picdir$dir_name" fi done fi fi
后来发现还是存在问题,好想是basename和dirname的问题,只要文件名中有空格就会出现问题,空格的前一部分会被dirname取走,而basename只能区到空格后面的一部分。不过只要没有空格都还是能正常的使用的。
在网上查查再修改。。。。
终于解决了,在改文件名之前先看看那些文件名中有空格,有空格的去掉就是了~
在function上面插入以下代码就OK~
#remove the space char from filename find $1 -type f -name "* *" -print | while read name; do ren=$(echo $name | tr ' ' '_') if [ "$name" != "$ren" ]; then mv "$name" "$ren" fi done
欢迎交流学习~
相关文章推荐
- shell脚本实现图片文件的重命名
- 学习笔记 linux 编译文件用shell脚本实现
- 【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)
- shell脚本实现文件锁功能
- shell脚本学习笔记(shell脚本实现文件的创建)
- shell脚本实现linux系统文件完整性检测
- shell脚本实现将文件中的几行输出合并成一行显示
- shell脚本实现定时备份某文件
- Shell脚本实现根据文件的修改时间来分类文件
- IDE & 软件结构 & 下拉菜单带图片 & 调用shell脚本 & 读取JTree文件名 & 文件读写 & File&ImageUtil & 行号 & 高亮 & 字体 & 背景颜色
- 实现两个文件内容逐行进行对比的shell脚本
- Shell脚本中使用for循环和cat命令实现按顺序合并文件
- shell脚本实现实时检测文件变更
- shell脚本实现关于可执行exec文件的自动打包
- Shell脚本实现上传zip压缩文件到FTP服务器
- shell脚本实现linux系统文件完整性检测
- Shell脚本实现线上服务器之间对比文件是否一致
- shell 脚本实现统计文件夹下目录及文件个数
- shell脚本实现自动压缩一天前的日志文件并传到ftp服务器上
- shell脚本实现nfs服务安装配置,共享文件分发