我从 mac 的 iPhoto 导出图片。目录以本地命名中的日期命名(“Day.MONTH YYYY”):
8. Mai 2013/
13. Juli 2013/
31. Oktober 2014/
其中一些带有 GPS 数据:
Capdepera, 2. Juli 2013/
Stuttgart, 13. Februar 2013/
Marsa Alam, 31. Dezember 2011/
我想要像 YYYY-MM-DD<.GPS-Data-if-exists> = 2013-07-02.Capdepera 这样的目录名称
我会将cut -d',' -f1
GPS 数据和-f2
日期部分(到 $DatePart)分开。第二步,我会用点“。”将日期部分拆分为日和月+年,然后取最后 4 位数字作为年份。之后我会得到
GPS="Capdepera"
DAY=02 # fill leading zero is no issue.
MONTH=Juli
YEAR=2013
现在,为了将月份映射到数字,我将创建一个像这样的数组
Monate="
Januar=01\n
Februar=02\n
Juli=07\n
"
结果echo -e $Monate | grep $MONTH| cut -d'=' -f2
我得到了 07 。现在我可以将它们全部连接到最终的目录名称以重命名它。
我现在的问题是:有没有像我上面描述的更简单的方法?我的意思是-f2
,在第一步中使用日期部分之后,像 SQL 函数 Convert() 这样的日期转换会给我结果,而无需拆分和数组作为步骤:
转换("$DatePart", +%Y-%m-%d) => 2013-07-02
谢谢,塞拉尔
答案1
使用基于 perl 的rename
实用程序,并给出适当的最新版本的 perl(特别是,旧版本Time::Piece
不提供use_locale
能够解析非英语月份和日期名称的方法):
$ LC_TIME=de_DE.UTF-8 rename -n -- '
BEGIN{use Time::Piece; Time::Piece->use_locale()};
s/(.*?), (\d+\. \w+ \d+)/Time::Piece->strptime($2,"%d. %B %Y")->strftime("%Y-%m-%d.$1")/e
' *,\ */
rename(Capdepera, 2. Juli 2013/, 2013-07-02.Capdepera/)
rename(Marsa Alam, 31. Dezember 2011/, 2011-12-31.Marsa Alam/)
rename(Stuttgart, 13. Februar 2013/, 2013-02-13.Stuttgart/)
LC_TIME=de_DE.UTF-8
如果您的区域设置已使用德语日期时间,则可以省略该分配。更简单的情况(没有 GPS 数据字符串)留作练习。