2014-01-07 42 views
0

从这个网站和互联网上,我已经找到了这个答案,但找不到它具体。我对Linux的知识不是很大,但是这里是我的问题: 我想用一个8个字符的文件名来转换一个JPG文件。所以从2014-12-12 23.59.59.jpg到484140b7.jpg(十六进制)。我来到了或发现这个代码:如何将文件名从十进制转换为十六进制?

ddate=$(exiv2 "${i}"|grep timestamp|cut -c 24-37|tr -d " :") 
cp "$i" "${ddate}.jpg" 

我看到这里和那里,你可以使用类似的printf“%X \ n”,但我不设法得到它的工作。

有人可以帮助我吗?

非常感谢您!

+0

的输出是什么'exiv2“$ {i}”| grep timestamp'? – janos

+0

结果是图片拍摄时的时间戳,但是像这样:图片时间戳:2014-12-12 23.59.59 – Helfenstein

回答

1

也许是这样的:

for x in *.jpg; do 
    f=$(sed "s/[^0-9]//g" <<< "$x") 
    cp "$x" "$(printf "%x.jpg" "$f")" 
done 

如果你想首先从日期的前部取出的一年,你可以使用一个cut你尝试:

for x in *.jpg; do 
    f=$(sed -e "s/[^0-9]//g" -e "s/^....//" <<< "$x") 
    cp "$x" "$(printf "%x.jpg" "$f")" 
done 
+0

@chepner感谢您的编辑。它有点整齐。 :) – lurker

+0

感谢您的编辑。它看起来更好。我在这里有点困惑。首先它应该是mv而不是cp ofcourse。所以用我的代码我已经得到了1212235959.jpg。这应该变成十六进制484140b7.jpg。我没有时间去测试你的代码,但是我有这种感觉,你试图从文件名中得到别的东西,而不是我想要的。我喜欢你的想法,让这样的数字出来,但你也可以使用诸如exiv2“%Y%m%d%h%m%s”之类的东西。但是我在Linux中并没有那么远,所以如果我错了,请纠正我。 – Helfenstein

+0

@janos,好,赶上,谢谢。 – lurker

相关问题