分页: 1 / 2
求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 14:59
由 青蜂侠6
首先是这样的,200多万图片被放在2000多个文件夹中,自动生成24位条码,后缀分别是_-1, _0, _1, _2, _3,每个条码可能最多分别拥有这些后缀。
举例,*代表条码,那么*条码下最多拥有 *_-1.PNG,*_0.PNG,*_1.PNG,*_2.PNG,*_3.PNG ,并且相同条码都会在一个文件夹下。
那么现在需要做的是,仅把拥有_-1的条码后缀+1(大部分条码是没有_-1后缀的,而是直接从_0开始的),也就是改成,*_0.PNG,*_1.PNG,*_2.PNG,*_3.PNG ,*_4.PNG
而且按图片原来后缀的顺序,一定不能变。
实在是棘手,束手无策中。。。。
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 15:04
由 青蜂侠6

求大神提点下吧
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 15:08
由 lilydjwg
代码: 全选
find . -name '*_-1.png' -o -name '*_-1.PNG' | xargs perl-rename 's/-1\.(png|PNG)$/+1.png/'
perl-rename 程序在你的系统上也可能是 rename.pl 等,请自行辨别。
顺便把文件后缀统一成小写了……
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 15:44
由 青蜂侠6
lilydjwg 写了:代码: 全选
find . -name '*_-1.png' -o -name '*_-1.PNG' | xargs perl-rename 's/-1\.(png|PNG)$/+1.png/'
perl-rename 程序在你的系统上也可能是 rename.pl 等,请自行辨别。
顺便把文件后缀统一成小写了……
再请问一下,怎么从这些图片中查找出,一些没有扩展名的文件?
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 15:47
由 青蜂侠6
lilydjwg 写了:代码: 全选
find . -name '*_-1.png' -o -name '*_-1.PNG' | xargs perl-rename 's/-1\.(png|PNG)$/+1.png/'
perl-rename 程序在你的系统上也可能是 rename.pl 等,请自行辨别。
顺便把文件后缀统一成小写了……
perl-rename 's这个意思是?

Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 15:57
由 eexpress
直接是rename,不要管perl-rename或者rename.pl。
man perlre
学会正则。
其他不求人。
就是后缀+1嘛。还是只处理_-1的,变成0?描述不是很清楚。
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 15:59
由 lilydjwg
eexpress 写了:直接是rename,不要管perl-rename或者rename.pl。
man perlre
学会正则。
其他不求人。
就是后缀+1嘛。还是只处理_-1的,变成0?描述不是很清楚。
util-linux 里也有个 rename 程序的。
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 16:00
由 lilydjwg
青蜂侠6 写了:
再请问一下,怎么从这些图片中查找出,一些没有扩展名的文件?
对有扩展名的取反不就可以了?
代码: 全选
find . ! -name '*.*'
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 16:02
由 青蜂侠6
eexpress 写了:直接是rename,不要管perl-rename或者rename.pl。
man perlre
学会正则。
其他不求人。
就是后缀+1嘛。还是只处理_-1的,变成0?描述不是很清楚。
是带有_-1后缀的条码,这个条码的后缀全部+1
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 16:12
由 eexpress
那不就是-1变成0?
s/_-1\./_0./
就可以了。
如果是全部+1,就写成
s/_([-\d]*)\./"_".($1+1)."."/e
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 20:37
由 cao627
将文件a1x 改名为 a2y
代码: 全选
s/(\d)x/"".($1+1)."y"/e a1x
问下
eexpress
" ".($1+1)." "
括号要在双重双引号之内,而且要在旁边加两个.
如何理解这个语法?
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 21:47
由 eexpress
e是表示:替换部分,使用函数功能。
.是连接字符串而已。
()是取函数结果。
就是替换部分,是纯perl语法。搜索部分,是正则语法。
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 23:22
由 wjchen
楼主的意思应该不仅仅是-1变成0,而是相应条码的-1变成0、0变成1、1变成2……
楼上的都不完全对。
我的思路
代码: 全选
find . -name '*_-1.png' -o -name '*_-1.PNG' | while read p;do
temp=`basename "$p"`
find . -name "${temp%_*}_*" | xargs rename 's/_([-\d]*)\./"_".($1+1)."."/e'
done
有点麻烦,期待高人写出更好方法。
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-05-23 23:26
由 lilydjwg
Re: 求解决ubuntu server 下200万图片的,重命名问题
发表于 : 2012-06-02 18:55
由 niejieqiang
那两千多个目录中,只要有-1的,就把那目录png加一?是这么个意思?
代码: 全选
#!perl -w
use strict;
#ni de 2000duoge wenjianjia shi zai tong yi mulu?
my @files_subdir;
my $old;
for my $dir (grep{ -d}glob"*"){
@files_subdir=grep{-f}glob"$dir/*";
if(grep{/-1(?=\.png$)/i}@files_subdir){
for(@files_subdir){
$old=$_;
s/(?<=_)([-]?\d)(?=\.png$)/$1+1/ie;
rename $old,$_;
}
}
else{
next;
}
}