分页: 1 / 2

右键脚本:exif-filename.pl

发表于 : 2009-08-26 15:17
eexpress

代码: 全选

☎ cat exif-filename.pl 
#!/usr/bin/perl

use File::Basename;
$dir=dirname $ARGV[0];
chdir $dir;

my @f=glob "*.JPG *.jpg";
foreach (@f){
my $DateTimeOriginal=`exif -t 0x9003 \'$_\'|grep "Value:"`;
chomp $DateTimeOriginal;
my @s=split " ", $DateTimeOriginal;
$s[1]=~s/:/-/g;
$n="$s[1]_$s[2]";

$nn=$n;
my $loop=0;
while(-e "$nn.jpg"){
$nn="$n_$loop";
$loop++;
}
$n=$nn;

print "$_ => $n.jpg\n";
rename "$_","$n.jpg";
}

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-26 23:10
c\nc
perl 控? 用 bash 调用 identify ,用这个 1/3 的脚本好像就够了。

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-26 23:28
eexpress
拉,吹下算了
:em04

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-26 23:33
xiooli
火星文,看不懂 :em20

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-26 23:36
hellojinjie
perl 的很难懂的...

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-26 23:38
wangdu2002
看不明白,这次ee非水贴被水了。 :em03

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-26 23:45
photor
干嘛子用的? :em20

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-27 12:23
c\nc
阿姨还不服气

代码: 全选

#!/bin/bash
cd "${*%/*}"
IFS=$'\n' array=(`identify -format "%f@%[exif:DateTimeOriginal]\n" *.jp*g`)
for x in ${array[@]}; do
	fn="${x%@*}"
	exif="${x##*@}"
	exif="${exif//:/-}"
	mv "$fn" "${exif// /_}.${fn##*.}"
done

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-27 12:30
eexpress
因为你没看懂我的pl啊。 :em04 你少了功能的。
只是操作了文字部分,而且bash的文字处理,和pl比,不是找死嘛。

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-27 12:31
c\nc
少了啥? :em06

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-27 12:33
eexpress
晕。你一行一行看,一段一段看,相同功能部分,肯定是perl的简单。不同的部分,就是你少的啊。

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-27 12:33
c\nc
我不懂perl,以上就是猜的

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-27 12:43
eexpress
好罗。告诉你,你的,一行都省不了。中间最长的一段,是自动递增后缀的,防止同名覆盖,那print的,你应该懂吧。你这就是组合了2个地方,2行变1行。

其实,优点是这个。bash很多操作,转义非常晦涩麻烦,而perl很少需要转义,因为正则就是他的基础。而且,一次正则后,perl有巨多的中间变量,可以直接调用,比如正则前的部分,后面的部分,比较的部分。所以说字符处理,不提bash。

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-27 12:47
c\nc
明白了 :em20
我这个也能凑合用,哪找自己拍的两张照片,连时间秒数都一样的……

Re: 右键脚本:exif-filename.pl

发表于 : 2009-08-27 12:48
eexpress
是没exif信息的时候。
呵呵。说明你经验少啊。