根据文件中的时间戳对文件进行排序
Posted
技术标签:
【中文标题】根据文件中的时间戳对文件进行排序【英文标题】:Sorting files based on a timestamp within the file 【发布时间】:2012-02-09 20:31:55 【问题描述】:我有一堆文件,其中包含一个带有时间戳的 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:mm
sort --key
选项看起来很有希望,但我所有的尝试都失败了。任何帮助深表感谢。谢谢。
【问题讨论】:
这是一道编程题吗?如果是这样,您使用哪种语言进行编程? @Paul - 使用命令行。 这个问题属于Super User SE 网站。 【参考方案1】:假设这些文件是图像,那么您可以使用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'
。
【讨论】:
谢谢,但重命名文件不是一个选项:( 您的答案适用于大多数图像文件格式,但这种特殊的文件格式是专有的,所以exiftool
对我不起作用。但是概念是相同的,所以我可以使用这种方法来达到预期的结果。谢谢。以上是关于根据文件中的时间戳对文件进行排序的主要内容,如果未能解决你的问题,请参考以下文章