sh/bash/dash/ksh/zsh等Shell脚本
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#1
帖子
由 eexpress » 2009-08-26 15:17
代码: 全选
☎ 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";
}
● 鸣学
-
c\nc
- 帖子: 231
- 注册时间: 2007-12-25 12:51
#2
帖子
由 c\nc » 2009-08-26 23:10
perl 控? 用 bash 调用 identify ,用这个 1/3 的脚本好像就够了。
-
xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
-
联系:
#4
帖子
由 xiooli » 2009-08-26 23:33
火星文,看不懂
-
wangdu2002
- 帖子: 13284
- 注册时间: 2008-12-13 19:39
- 来自: 物华天宝人杰地灵
#6
帖子
由 wangdu2002 » 2009-08-26 23:38
看不明白,这次ee非水贴被水了。
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!
-
photor
- 论坛版主
- 帖子: 11004
- 注册时间: 2008-04-26 12:41
#7
帖子
由 photor » 2009-08-26 23:45
干嘛子用的?
-
c\nc
- 帖子: 231
- 注册时间: 2007-12-25 12:51
#8
帖子
由 c\nc » 2009-08-27 12:23
阿姨还不服气
代码: 全选
#!/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
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#9
帖子
由 eexpress » 2009-08-27 12:30
因为你没看懂我的pl啊。
你少了功能的。
只是操作了文字部分,而且bash的文字处理,和pl比,不是找死嘛。
● 鸣学
-
c\nc
- 帖子: 231
- 注册时间: 2007-12-25 12:51
#10
帖子
由 c\nc » 2009-08-27 12:31
少了啥?
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#11
帖子
由 eexpress » 2009-08-27 12:33
晕。你一行一行看,一段一段看,相同功能部分,肯定是perl的简单。不同的部分,就是你少的啊。
● 鸣学
-
c\nc
- 帖子: 231
- 注册时间: 2007-12-25 12:51
#12
帖子
由 c\nc » 2009-08-27 12:33
我不懂perl,以上就是猜的
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#13
帖子
由 eexpress » 2009-08-27 12:43
好罗。告诉你,你的,一行都省不了。中间最长的一段,是自动递增后缀的,防止同名覆盖,那print的,你应该懂吧。你这就是组合了2个地方,2行变1行。
其实,优点是这个。bash很多操作,转义非常晦涩麻烦,而perl很少需要转义,因为正则就是他的基础。而且,一次正则后,perl有巨多的中间变量,可以直接调用,比如正则前的部分,后面的部分,比较的部分。所以说字符处理,不提bash。
● 鸣学
-
c\nc
- 帖子: 231
- 注册时间: 2007-12-25 12:51
#14
帖子
由 c\nc » 2009-08-27 12:47
明白了
我这个也能凑合用,哪找自己拍的两张照片,连时间秒数都一样的……
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#15
帖子
由 eexpress » 2009-08-27 12:48
是没exif信息的时候。
呵呵。说明你经验少啊。
● 鸣学