分页: 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
拉,吹下算了
Re: 右键脚本:exif-filename.pl
发表于 : 2009-08-26 23:33
由 xiooli
火星文,看不懂
Re: 右键脚本:exif-filename.pl
发表于 : 2009-08-26 23:36
由 hellojinjie
perl 的很难懂的...
Re: 右键脚本:exif-filename.pl
发表于 : 2009-08-26 23:38
由 wangdu2002
看不明白,这次ee非水贴被水了。
Re: 右键脚本:exif-filename.pl
发表于 : 2009-08-26 23:45
由 photor
干嘛子用的?
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啊。
你少了功能的。
只是操作了文字部分,而且bash的文字处理,和pl比,不是找死嘛。
Re: 右键脚本:exif-filename.pl
发表于 : 2009-08-27 12:31
由 c\nc
少了啥?
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
明白了
我这个也能凑合用,哪找自己拍的两张照片,连时间秒数都一样的……
Re: 右键脚本:exif-filename.pl
发表于 : 2009-08-27 12:48
由 eexpress
是没exif信息的时候。
呵呵。说明你经验少啊。