分页: 1 / 2
请问:rename如何规律性批量重命名?
发表于 : 2009-11-25 0:28
由 pityonline
现某一目录下有许多图片,诸如:
screenshot-rlkd.png
screenshot-lkjg.png
Screenshot-opijged93.png
Screenshot.png
Screenshot-3.png
screenshot-653.png
gdasf-screenshot.png
g3wonldf-screenshot.png
……
其中文件名中都含有screenshot或Screenshot这几个字母,请问如何批量将所有图片重命名为screenshot-000.png到screenshot-999.png,让后面的数字递增,这样就不会再看到一大堆乱七八糟的字母和数字了……
再就是,文件名更不规律,有的含有同样的单词,有的则不含,请问大家这个是否也可实现规律性批量重命名呢?
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-11-25 5:23
由 mlc880926
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-11-25 8:31
由 bigsun
用这个简单些:
代码: 全选
i=0; for img in `ls *.png`; do mv $img test-`printf %.6d $i`.png; i=`expr $i + 1`; done
如果要重命名的文件有空格,修改下:
代码: 全选
find ./ -name '*.png' | while read FILE; do mv "$FILE" test-`printf %.6d $i`.png; i=`expr $i + 1`; done
对空格文件,还有其它方法,参照
http://www.cyberciti.biz/tips/handling- ... -bash.html
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-11-25 12:29
由 aerofox
bigsun 写了:用这个简单些:
代码: 全选
i=0; for img in `ls *.png`; do mv $img test-`printf %.6d $i`.png; i=`expr $i + 1`; done
如果要重命名的文件有空格,修改下:
代码: 全选
find ./ -name '*.png' | while read FILE; do mv "$FILE" test-`printf %.6d $i`.png; i=`expr $i + 1`; done
对空格文件,还有其它方法,参照
http://www.cyberciti.biz/tips/handling- ... -bash.html
加上引号就不怕空格了。
代码: 全选
i=10000; for f in *.png; do mv "$f" ${i#1}.png; done
把所有扩展名为.png的文件按顺序重命令为4位数字编号,文件数目必须不多于10000,否则用上面提到的 printf 命令。
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-11-25 23:02
由 pityonline
mlc880926 写了:
感谢!曾在ee的回贴中看到这个软件,当时装了,还没仔细研究,原来这个可以实现!
aerofox 写了:bigsun 写了:用这个简单些:
代码: 全选
i=0; for img in `ls *.png`; do mv $img test-`printf %.6d $i`.png; i=`expr $i + 1`; done
如果要重命名的文件有空格,修改下:
代码: 全选
find ./ -name '*.png' | while read FILE; do mv "$FILE" test-`printf %.6d $i`.png; i=`expr $i + 1`; done
对空格文件,还有其它方法,参照
http://www.cyberciti.biz/tips/handling- ... -bash.html
加上引号就不怕空格了。
代码: 全选
i=10000; for f in *.png; do mv "$f" ${i#1}.png; done
把所有扩展名为.png的文件按顺序重命令为4位数字编号,文件数目必须不多于10000,否则用上面提到的 printf 命令。
代码: 全选
i=0; for img in `ls *.png`; do mv $img test-`printf %.6d $i`.png; i=`expr $i + 1`; done
的确可以实现!我的理解是:把到以.png结尾的所有文件,改名为test-(6位数字0).png,用expr $1+1来定义文件命名规则,不知道是不是这样的?
代码: 全选
find ./ -name '*.png' | while read FILE; do mv "$FILE" test-`printf %.6d $i`.png; i=`expr $i + 1`; done
同样可以实现!我的理解是:先用find找出以.png结尾的所有文件,然后用read读取find的查找结果,再按照上面命令的规则重命名,不知道是不是这样的?
代码: 全选
i=10000; for f in *.png; do mv "$f" ${i#1}.png; done
在当前目录下没有带空格的文件名的情况下:将当前目录下所有的png文件都删除了,只留下了一个0000.png。
在当前目录下有带空格的和不带空格的文件名的情况下:将当前目录下所有的png文件都删除了,只留下了一个0000.png和一个未改名的带空格的png文件。这个命令不是很理解,大致是找到以.png结尾的文件,然后把它们改名为${i#1}.png,在前面i定义为10000,改名规则是让所有文件从10000递减吗?请指教。
将以上三条命令都写成.sh文件后执行同直接执行命令结果一致!
再次感谢大家!
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-11-26 0:32
由 pityonline
还是要请教一下,我想把所有文件名都改为screenshot-(日期+时间).png,不含括号,这样应该怎么写?已经找到了比较中意的时间格式:
代码: 全选
date +\%F-%H%M
2009-11-26-0019
请问如何把它替换掉screenshot-后面的部分?试过多次都不成功,还望指点。谢谢!
我明白为什么不成功了,昨晚测试时没想明白干嘛都要把所有图片重命名为一个当前时间为名字的图片,怪不得好几个图片最后只变成一个。
我真正的目的是在屏幕截图后让它按截图的时间来命名截图的名字,这样名字都不一样,但好像gnome-screenshot不自带以截图时间命名的功能,看来还是要靠命令组合实现了……
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-11-26 6:57
由 aerofox
pityonline 写了:
代码: 全选
i=10000; for f in *.png; do mv "$f" ${i#1}.png; done
在当前目录下没有带空格的文件名的情况下:将当前目录下所有的png文件都删除了,只留下了一个0000.png。
在当前目录下有带空格的和不带空格的文件名的情况下:将当前目录下所有的png文件都删除了,只留下了一个0000.png和一个未改名的带空格的png文件。这个命令不是很理解,大致是找到以.png结尾的文件,然后把它们改名为${i#1}.png,在前面i定义为10000,改名规则是让所有文件从10000递减吗?请指教。
前面代码忘了给 i 递增了,修改一下:
代码: 全选
i=10000; for f in *.png; do mv "$f" ${i#1}.png; ((i++)); done
要确保"$f"那对引号,应该是可以处理带空格的文件的,这回我测试过了。适用于bash,其它shell没试过。
定义i为10000,是为了让它带前导的零,如果从0开始,bash不能自动补上前导的0(换成ksh可以),从10000开始,再用${i#1}去掉前面的1,就解决这一问题,免去了用printf的麻烦。
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-11-26 9:35
由 eexpress
其实就是玩peregex
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-11-26 9:47
由 pityonline
aerofox 写了:pityonline 写了:
代码: 全选
i=10000; for f in *.png; do mv "$f" ${i#1}.png; done
在当前目录下没有带空格的文件名的情况下:将当前目录下所有的png文件都删除了,只留下了一个0000.png。
在当前目录下有带空格的和不带空格的文件名的情况下:将当前目录下所有的png文件都删除了,只留下了一个0000.png和一个未改名的带空格的png文件。这个命令不是很理解,大致是找到以.png结尾的文件,然后把它们改名为${i#1}.png,在前面i定义为10000,改名规则是让所有文件从10000递减吗?请指教。
前面代码忘了给 i 递增了,修改一下:
代码: 全选
i=10000; for f in *.png; do mv "$f" ${i#1}.png; ((i++)); done
要确保"$f"那对引号,应该是可以处理带空格的文件的,这回我测试过了。适用于bash,其它shell没试过。
定义i为10000,是为了让它带前导的零,如果从0开始,bash不能自动补上前导的0(换成ksh可以),从10000开始,再用${i#1}去掉前面的1,就解决这一问题,免去了用printf的麻烦。
感谢回复!这次测试了一下新的命令,成功!
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-12-01 20:21
由 pityonline
请问对6楼的问题大家有解决方案吗?就是让截图自动以当时的日期和时间命名?
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-12-01 20:25
由 yechao1989
我用Gnome-commander倒是蛮好用的!
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-12-01 20:32
由 pityonline
兴奋系列的很多呀……
Re: 请问:rename如何规律性批量重命名?
发表于 : 2009-12-01 21:20
由 yechao1989
pityonline 写了:兴奋系列的很多呀……
嘿嘿,被发现了

Re: 请问:rename如何规律性批量重命名?
发表于 : 2011-08-14 22:33
由 ybdx2000
不好,,有没有直接鼠标操作的。。要不真麻烦。。。
Re: 请问:rename如何规律性批量重命名?
发表于 : 2011-08-15 0:05
由 我就是我2
scrot