[File] File magic for R's RDS and RData file formats
Gert Hulselmans
hulselmansgert at gmail.com
Tue Feb 4 16:45:08 UTC 2025
File magic for R's RDS and RData file formats:
$ cat magic/Magdir/r
#------------------------------------------------------------------------------
# $File: r,v 1.0 2025/02/04 12:12:52 christos Exp $
# file(1) magic for R's RDS and RData file formats
# Copyright (C) 2025 Gert Hulselmans <hulselmansgert at gmail.com>
#
# URLS:
# https://cran.r-project.org/doc/manuals/r-release/R-ints.html#Serialization-Formats
# https://rdata.readthedocs.io/en/latest/_modules/rdata/parser/_parser.html
#
# Example files:
# https://github.com/vnmabus/rdata/tree/develop/rdata/tests/data
#
###############################################################################
###############################################################################
# RDS format
###############################################################################
0 name RDS
# Check for RDS ASCII formats.
>0 string A\n2\n R RDS (ASCII format v2)
>0 string A\n3\n R RDS (ASCII format v3)
>0 string A\r\n2\r\n R RDS (ASCII CRLF format v2)
>0 string A\r\n3\r\n R RDS (ASCII CRLF format v3)
# Check for RDS binary formats with native word order.
>0 string B\n\0\0\0 R RDS (Native (big-endian) word order format
>>0 use RDS_binary_version_info
>0 string B\n\2\0\0 R RDS (Native (little-endian) word order format
>>0 use ^RDS_binary_version_info
>0 string B\n\3\0\0 R RDS (Native (little-endian) word order format
>>0 use ^RDS_binary_version_info
# Check for RDS XDR binary save format.
>0 string X\n\0\0\0 R RDS (XDR binary save format
>>0 use RDS_binary_version_info
# Parse version numbers from RDS if it was one of the binary versions.
0 name RDS_binary_version_info
>2 belong >-1 v%d)
>6 beshort >-1 \b, written by R v%d.
>8 byte >-1 \b%d.
>9 byte >-1 \b%d
>10 beshort >-1 \b, readable from R v%d.
>12 byte >-1 \b%d.
>13 byte >-1 \b%d
>2 belong >2
>>14 pstring/L x \b, %s encoded
# Check if file is one of the RDS ASCII formats.
0 string A
>0 use RDS not_printed
!:ext rds
# Check if file is RDS binary native format.
0 string B
>0 use RDS not_printed
!:ext rds
# Check if file is RDS XDR binary save format.
0 string X
>0 use RDS not_printed
!:ext rds
###############################################################################
# RData file formats: magic bytes followed by RDS container.
###############################################################################
0 string RDA2\n R RData version 2 (ASCII),
!:ext rda/rdata
>5 use RDS
0 string RDA3\n R RData version 3 (ASCII),
!:ext rda/rdata
>5 use RDS
0 string RDX2\n R RData version 2 (binary),
!:ext rda/rdata
>5 use RDS
0 string RDX3\n R RData version 3 (binary),
!:ext rda/rdata
>5 use RDS
Base64-encoded versions to preserve TABs.
$ cat magic/Magdir/r | base64
Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojICRGaWxlOiByLHYgMS4wIDIwMjUvMDIvMDQgMTI6MTI6
NTIgY2hyaXN0b3MgRXhwICQKIyAgICBmaWxlKDEpIG1hZ2ljIGZvciBSJ3MgUkRTIGFuZCBSRGF0
YSBmaWxlIGZvcm1hdHMKIyAgICBDb3B5cmlnaHQgKEMpIDIwMjUgR2VydCBIdWxzZWxtYW5zIDxo
dWxzZWxtYW5zZ2VydEBnbWFpbC5jb20+CiMKIyAgICBVUkxTOgojICAgICAgaHR0cHM6Ly9jcmFu
LnItcHJvamVjdC5vcmcvZG9jL21hbnVhbHMvci1yZWxlYXNlL1ItaW50cy5odG1sI1NlcmlhbGl6
YXRpb24tRm9ybWF0cwojICAgICAgaHR0cHM6Ly9yZGF0YS5yZWFkdGhlZG9jcy5pby9lbi9sYXRl
c3QvX21vZHVsZXMvcmRhdGEvcGFyc2VyL19wYXJzZXIuaHRtbAojCiMgICAgRXhhbXBsZSBmaWxl
czoKIyAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS92bm1hYnVzL3JkYXRhL3RyZWUvZGV2ZWxvcC9y
ZGF0YS90ZXN0cy9kYXRhCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCiMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKIyBSRFMgZm9ybWF0CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCjAJbmFtZQlSRFMK
IyBDaGVjayBmb3IgUkRTIEFTQ0lJIGZvcm1hdHMuCj4wCXN0cmluZwlBXG4yXG4JUiBSRFMgKEFT
Q0lJIGZvcm1hdCB2MikKPjAJc3RyaW5nCUFcbjNcbglSIFJEUyAoQVNDSUkgZm9ybWF0IHYzKQo+
MAlzdHJpbmcJQVxyXG4yXHJcbglSIFJEUyAoQVNDSUkgQ1JMRiBmb3JtYXQgdjIpCj4wCXN0cmlu
ZwlBXHJcbjNcclxuCVIgUkRTIChBU0NJSSBDUkxGIGZvcm1hdCB2MykKIyBDaGVjayBmb3IgUkRT
IGJpbmFyeSBmb3JtYXRzIHdpdGggbmF0aXZlIHdvcmQgb3JkZXIuCj4wCXN0cmluZwlCXG5cMFww
XDAJUiBSRFMgKE5hdGl2ZSAoYmlnLWVuZGlhbikgd29yZCBvcmRlciBmb3JtYXQKPj4wCXVzZSBS
RFNfYmluYXJ5X3ZlcnNpb25faW5mbwo+MAlzdHJpbmcJQlxuXDJcMFwwCVIgUkRTIChOYXRpdmUg
KGxpdHRsZS1lbmRpYW4pIHdvcmQgb3JkZXIgZm9ybWF0Cj4+MAl1c2UgXlJEU19iaW5hcnlfdmVy
c2lvbl9pbmZvCj4wCXN0cmluZwlCXG5cM1wwXDAJUiBSRFMgKE5hdGl2ZSAobGl0dGxlLWVuZGlh
bikgd29yZCBvcmRlciBmb3JtYXQKPj4wCXVzZSBeUkRTX2JpbmFyeV92ZXJzaW9uX2luZm8KIyBD
aGVjayBmb3IgUkRTIFhEUiBiaW5hcnkgc2F2ZSBmb3JtYXQuCj4wCXN0cmluZwlYXG5cMFwwXDAJ
UiBSRFMgKFhEUiBiaW5hcnkgc2F2ZSBmb3JtYXQKPj4wCXVzZSBSRFNfYmluYXJ5X3ZlcnNpb25f
aW5mbwoKCiMgUGFyc2UgdmVyc2lvbiBudW1iZXJzIGZyb20gUkRTIGlmIGl0IHdhcyBvbmUgb2Yg
dGhlIGJpbmFyeSB2ZXJzaW9ucy4KMAluYW1lCVJEU19iaW5hcnlfdmVyc2lvbl9pbmZvCj4yCWJl
bG9uZwk+LTEJdiVkKQo+NgliZXNob3J0CT4tMQlcYiwgd3JpdHRlbiBieSBSIHYlZC4KPjgJYnl0
ZQk+LTEJXGIlZC4KPjkJYnl0ZQk+LTEJXGIlZAo+MTAJYmVzaG9ydAk+LTEJXGIsIHJlYWRhYmxl
IGZyb20gUiB2JWQuCj4xMglieXRlCT4tMQlcYiVkLgo+MTMJYnl0ZQk+LTEJXGIlZAo+MgliZWxv
bmcJPjIKPj4xNAlwc3RyaW5nL0wJeAlcYiwgJXMgZW5jb2RlZAoKCiMgQ2hlY2sgaWYgZmlsZSBp
cyBvbmUgb2YgdGhlIFJEUyBBU0NJSSBmb3JtYXRzLgowCXN0cmluZwlBCj4wCXVzZSBSRFMJbm90
X3ByaW50ZWQKITpleHQJcmRzCgojIENoZWNrIGlmIGZpbGUgaXMgUkRTIGJpbmFyeSBuYXRpdmUg
Zm9ybWF0LgowCXN0cmluZwlCCj4wCXVzZSBSRFMJbm90X3ByaW50ZWQKITpleHQJcmRzCgojIENo
ZWNrIGlmIGZpbGUgaXMgUkRTIFhEUiBiaW5hcnkgc2F2ZSBmb3JtYXQuCjAJc3RyaW5nCVgKPjAJ
dXNlIFJEUwlub3RfcHJpbnRlZAohOmV4dAlyZHMKCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMg
UkRhdGEgZmlsZSBmb3JtYXRzOiBtYWdpYyBieXRlcyBmb2xsb3dlZCBieSBSRFMgY29udGFpbmVy
LgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgowCXN0cmluZwlSREEyXG4JUiBSRGF0YSB2ZXJzaW9u
IDIgKEFTQ0lJKSwKITpleHQJcmRhL3JkYXRhCj41CXVzZQlSRFMKCjAJc3RyaW5nCVJEQTNcbglS
IFJEYXRhIHZlcnNpb24gMyAoQVNDSUkpLAohOmV4dAlyZGEvcmRhdGEKPjUJdXNlCVJEUwoKMAlz
dHJpbmcJUkRYMlxuCVIgUkRhdGEgdmVyc2lvbiAyIChiaW5hcnkpLAohOmV4dAlyZGEvcmRhdGEK
PjUJdXNlCVJEUwoKMAlzdHJpbmcJUkRYM1xuCVIgUkRhdGEgdmVyc2lvbiAzIChiaW5hcnkpLAoh
OmV4dAlyZGEvcmRhdGEKPjUJdXNlCVJEUwo=
Cheers,
Gert
More information about the File
mailing list