我有一堆文件,其中包含带有时间戳 WITHIN 文件的ascii标头,然后是大量二进制数据。我想在命令行(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
选项看起来很有希望,但我的所有尝试都失败了。任何帮助深表感谢。感谢。
答案 0 :(得分: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
注意:当文件名中有空格时,这将不起作用(我将把它留给您解决)。如果您只想输出已排序的文件名,请在| awk '{print $NF}'
之后附加sort -n
。