求解决ubuntu server 下200万图片的,重命名问题

sh/bash/dash/ksh/zsh等Shell脚本
头像
青蜂侠6
帖子: 15
注册时间: 2012-05-10 15:30
联系:

求解决ubuntu server 下200万图片的,重命名问题

#1

帖子 青蜂侠6 » 2012-05-23 14:59

首先是这样的,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
而且按图片原来后缀的顺序,一定不能变。
实在是棘手,束手无策中。。。。
新手签名要低调,恩恩。
头像
青蜂侠6
帖子: 15
注册时间: 2012-05-10 15:30
联系:

Re: 求解决ubuntu server 下200万图片的,重命名问题

#2

帖子 青蜂侠6 » 2012-05-23 15:04

:em18 求大神提点下吧
新手签名要低调,恩恩。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求解决ubuntu server 下200万图片的,重命名问题

#3

帖子 lilydjwg » 2012-05-23 15:08

代码: 全选

find . -name '*_-1.png' -o -name '*_-1.PNG' | xargs perl-rename 's/-1\.(png|PNG)$/+1.png/'
perl-rename 程序在你的系统上也可能是 rename.pl 等,请自行辨别。
顺便把文件后缀统一成小写了……
头像
青蜂侠6
帖子: 15
注册时间: 2012-05-10 15:30
联系:

Re: 求解决ubuntu server 下200万图片的,重命名问题

#4

帖子 青蜂侠6 » 2012-05-23 15:44

lilydjwg 写了:

代码: 全选

find . -name '*_-1.png' -o -name '*_-1.PNG' | xargs perl-rename 's/-1\.(png|PNG)$/+1.png/'
perl-rename 程序在你的系统上也可能是 rename.pl 等,请自行辨别。
顺便把文件后缀统一成小写了……
再请问一下,怎么从这些图片中查找出,一些没有扩展名的文件?
新手签名要低调,恩恩。
头像
青蜂侠6
帖子: 15
注册时间: 2012-05-10 15:30
联系:

Re: 求解决ubuntu server 下200万图片的,重命名问题

#5

帖子 青蜂侠6 » 2012-05-23 15:47

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
新手签名要低调,恩恩。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求解决ubuntu server 下200万图片的,重命名问题

#6

帖子 eexpress » 2012-05-23 15:57

直接是rename,不要管perl-rename或者rename.pl。

man perlre
学会正则。
其他不求人。

就是后缀+1嘛。还是只处理_-1的,变成0?描述不是很清楚。
● 鸣学
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求解决ubuntu server 下200万图片的,重命名问题

#7

帖子 lilydjwg » 2012-05-23 15:59

eexpress 写了:直接是rename,不要管perl-rename或者rename.pl。

man perlre
学会正则。
其他不求人。

就是后缀+1嘛。还是只处理_-1的,变成0?描述不是很清楚。
util-linux 里也有个 rename 程序的。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求解决ubuntu server 下200万图片的,重命名问题

#8

帖子 lilydjwg » 2012-05-23 16:00

青蜂侠6 写了: 再请问一下,怎么从这些图片中查找出,一些没有扩展名的文件?
对有扩展名的取反不就可以了?

代码: 全选

find . ! -name '*.*'
头像
青蜂侠6
帖子: 15
注册时间: 2012-05-10 15:30
联系:

Re: 求解决ubuntu server 下200万图片的,重命名问题

#9

帖子 青蜂侠6 » 2012-05-23 16:02

eexpress 写了:直接是rename,不要管perl-rename或者rename.pl。

man perlre
学会正则。
其他不求人。

就是后缀+1嘛。还是只处理_-1的,变成0?描述不是很清楚。
是带有_-1后缀的条码,这个条码的后缀全部+1
新手签名要低调,恩恩。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求解决ubuntu server 下200万图片的,重命名问题

#10

帖子 eexpress » 2012-05-23 16:12

那不就是-1变成0?
s/_-1\./_0./
就可以了。

如果是全部+1,就写成
s/_([-\d]*)\./"_".($1+1)."."/e
● 鸣学
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: 求解决ubuntu server 下200万图片的,重命名问题

#11

帖子 cao627 » 2012-05-23 20:37

将文件a1x 改名为 a2y

代码: 全选

s/(\d)x/"".($1+1)."y"/e  a1x
问下eexpress

" ".($1+1)." "
括号要在双重双引号之内,而且要在旁边加两个.
如何理解这个语法?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求解决ubuntu server 下200万图片的,重命名问题

#12

帖子 eexpress » 2012-05-23 21:47

e是表示:替换部分,使用函数功能。
.是连接字符串而已。
()是取函数结果。

就是替换部分,是纯perl语法。搜索部分,是正则语法。
● 鸣学
头像
wjchen
帖子: 583
注册时间: 2011-05-02 19:08
系统: ubuntu 12.04

Re: 求解决ubuntu server 下200万图片的,重命名问题

#13

帖子 wjchen » 2012-05-23 23:22

楼主的意思应该不仅仅是-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
有点麻烦,期待高人写出更好方法。
上次由 wjchen 在 2012-05-24 9:02,总共编辑 1 次。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求解决ubuntu server 下200万图片的,重命名问题

#14

帖子 lilydjwg » 2012-05-23 23:26

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
niejieqiang
帖子: 151
注册时间: 2009-05-29 22:05

Re: 求解决ubuntu server 下200万图片的,重命名问题

#15

帖子 niejieqiang » 2012-06-02 18:55

那两千多个目录中,只要有-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;
       }
}
回复