分页: 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
:em18 求大神提点下吧

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这个意思是? :em23

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
wjchen 写了:楼主的意思应该不仅仅是-1变成0,而是相应条码的-1变成0、0变成1、1变成2……
楼上的都不完全对。
你在命令行里输入

代码: 全选

$ echo my password
然后把输出的结果拿去登录,结果登录失败。然后你说,这什么破玩意嘛,完全不对嘛。 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20 :em20

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;
       }
}