2012-02-09 110 views
1

我有一堆文件,其中包含带时间戳记的ASCII标头WITHIN该文件后面跟着一大块二进制数据。我想列出按这个时间戳排列的文件,在命令行(bash等)。基于文件中的时间戳对文件进行排序

文件头类似于以下内容:

encoding: raw 
endian: big 
dimension: 4 
sizes: 128 128 1 4 
spacings: 1.0 1.0 1.0 NaN 
position: -3164,-13678 
date_time: 06.02.12.18:59 
user_name: Operator1 
sample_name: 
dwell_time: 4.000 
count_time: 65.536 
duration: 202.000 
raster: 79912 
pixel_width: 624.3125 
pixel_height: 624.3125 

....binary data.... 

我想基于“DATE_TIME”时间戳,它使用格式dd.mm.yy.hh排序:毫米

sort --key选项看起来很有希望,但我所有的尝试都失败了。任何帮助深表感谢。谢谢。

+0

这是一个编程问题?如果是这样,你使用哪种语言进行编程? – Paul 2012-02-09 20:46:05

+0

@Paul - 使用命令行。 – 2012-02-09 20:54:19

+0

此问题属于[超级用户](http://superuser.com/)SE站点。 – Paul 2012-02-09 20:58:44

回答

0

假设这些文件的图像,因此您可以使用一个工具,如exiftool基于其创建日期来重命名它们,然后按名称排序。

如果你不能将其重命名,只转储与创建日期STDOUT和sort的名字是,如:

exiftool -p '$dateTimeOriginal $filename' -q -f DIRECTORY/WHERE/IMAGES/ARE | sort -n 

如果你只是想在输出文件名,追加一个| cut -f 2 -d " "到结束。

如果它未通过exiftool识别的文件格式,这可能会或可能无法正常工作:

for f in YOURFILES* ; do 
    filedate=`grep --binary-file=text -i -o 'date_time: ...........:..' $f | head -1` 
    echo "$filedate $f" 
done | sort -n 

注意:当有文件名中的空间,这将无法正常工作(和我要走了那要给你解决)。如果您只想输出已排序的文件名,请在sort -n之后附加| awk '{print $NF}'

+0

谢谢,但重命名的文件是不是一种选择:( – 2012-02-09 20:51:01

+0

OK,编辑我的答案。 – 2012-02-09 20:59:10

+0

你的答案适用于大多数的图像文件格式,但这个特殊的文件格式是私有的,因此'exiftool'不会为我工作。但是这个概念相同,所以我可以使用这种方法来达到预期的效果。谢谢。 – 2012-02-09 22:48:45

相关问题