根据文件中的时间戳对文件进行排序

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 对我不起作用。但是概念是相同的,所以我可以使用这种方法来达到预期的结果。谢谢。

以上是关于根据文件中的时间戳对文件进行排序的主要内容,如果未能解决你的问题,请参考以下文章

按最近的时间戳对数组中的对象数组进行排序,然后使用 jq 按每个数组的第一个对象的时间戳对外部数组进行排序

如何按时间戳对数组进行排序?

使用 Python 对 CSV 文件中的时间戳进行排序

Flutter 按时间戳对 Firebase 快照进行排序

在 Cloudkit.JS 中按时间戳对记录进行排序

按时间戳对组内的行进行排序