Дополнение №38


Определение типа файла по его содержимому.



Данный функционал будет полезен при определения расширений для файлов, у которых их нет:

- при восстановлении данных при случайном удалении расширений.
- при восстановлении файлов скаченных из сети без расширений или если они искажены.
- для определения оригинальных расширений при изменении типов файлов.
- для определения оригинальных расширений файлов кэша браузеров и других приложений.



Отдельное спасибо тем, кто участвовал в тестировании и присылал архивы с файлами: shveicar, chip642, zybrevl, ogenry



Может использоваться в различных параметрах и командах:

1. В команде renmm, renms, copyy, copys, movee, moves

Примеры команд:

;; постараться найти расширения для выделенных файлов без расширения и переименовать
renms=%WL||extplus<>||upd<1>

;; копировать выделенные файлы в другую панель, заменить расширение на "правильное", если не найдено, то расширение остаётся прежним
copys=%WL||"%t"//0||**2!!?.<info=f230::>


2. В параметре info

Примеры команд:

;; для выделенных файлов получить в таблице оригинальные расширения
anf2d=%WL||1||##@@f230:: GLOBALANF2D<a>




В версии 30.2 добавлены дополнительные подпараметры в параметры:
  extplus<Mode|tExt|bExt>
  <info=f230File|Mode|tExt|bExt>
  Все параметры необязательны.
    Mode - режим возвращения расширения исполняемых файлов типа exe:
      1 - возвращается расширение ins.exe или sfx.exe (по умолчанию).
      2 - возвращается расширение exe.
      3 - возвращается расширение exe или sfx.
    tExt - если расширение не найдено, то для текстового формата файла возвращается заданное расширение tExt.
      (прописывается символ *, если нужно возвращать пустое расширение)
    bExt - если расширение не найдено, то для бинарного формата файла возвращается заданное расширение bExt.

Примеры команд:

;; переименовать выделенные файлы без расширения в расширение, определённому по содержимому файла (если расширение не найдено, то для текстовых файлов расширение "txt", для бинарных "bbb")
renms=%WL||extplus<2|txt|bbb>||upd<1>

;; из выделенных файлов копировать в другую панель те, которые определяются по содержимому (т.е. полученное расширение совпадает с существующим
copys=%WL||"%t"//0||test<1w!!``f11::!!f230::|2>||upd<3>


Возвращается расширение "#" при "пустом" бинарном файле, в котором одни нули, при проверке первых 37000 байтов.



Список типов файлов, которые определяются по содержимому:

 Типы файлов
0-9__meta__, ~0, ~1, ~2, ~3, ~4, ~5, ~6, ~7, ~8, ~9, ~json, ~tmp, 0, 000, 001, 08, 1, 14, 16, 1q, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 3bs, 3dg, 3dl, 3dp, 3dprimitive (bodyproportion), 3ds, 3dsn, 3g2 (3gpp2), 3gp (3gpp), 3pp, 3tiff, 5, 50h, 669, 6bit, 7, 7z (sbsar/jpac/z), 8ba, 8be, 8bf (8li), 8bi, 8bx, 8by, 8li, 8me, 8svx (iff)
Aa (lib), a3x, aac, aai, aapp, aarch64, aaui, aba, abbrev, abc, abc3, abk, abr, abs, abw, ac, ac3, acb, acbl, accdb (acc/accde/accda/accdu), accdt (accft), acd, acda, acdt, ace, acf, acg, acl, acm, aco, acorn, acrodata, acrotheme, acs, acs2, acs3, acs4, acs5, acsrf, act, action, acv, acx, adb, adb2, adc, add, addin, addon, adf, adg, adm, adml (def/dat/opal), admx (opax), ado, adp, adr, ads, adt, adv, aed, aedlayout, aei, aep, aex, afd, aff, afm, afpl, afpxml, agc, ahf (bhf/qhf), ahk, ahu, ai, aia, aif (aiff), aifc, aimppl, aimppl4, aip, aip, aiqb (cpf), aix, al, aldict, alias, allow, alut3, alv, am, am7, amd, amf, amiga, amio, amm, amp, amr, amsdc, amt, ana, ani, animtext, anm, anp, ansi, any, ap, ape, apf, api (ppi), apk, apl, apln (rpln), apm, appx, aqt, arbfp1, arbvp1, arc, arch, archive, aren, arf, arj, arr, arsc, arw, as, asar, asc (sig), ascx (cs), asd, asdb, ase, asedzs, asfx, ash, ashaudio, ashlang, asl, asm, asn, asp, ass, assetproj, assets, ast, asx, asz, atari, atb, atk-sharp, atm, atn, atr, ats, au, au3, auo, authedtheme, auths, automaticdestinations-ms, aux, avi, avif, avifs, avs (aph), avsi (avs), avsz, avz, aw, awk, ax, axco, axct (act)
Bb32, b64, b64, ba, baa, bar, bas, base, bash, bashrc, bat (cmd), bau, bbl, bbm, bc, bc32, bcc, bcc32, bcd, bcdb, bcg, bcm, bcmap, bdf, bdic, bdjo, bdmv, bdr, beos, bep, betaid, bfc, bff, bg, bht, bib, bigrams, bik, bin, bindump, bitcfg, bitmap, biz, bkl, bkml, blb, blend, blf, bll, blob, blw, bmk, bmp (dib/rle/bmp2/bmp3/bmp4), bmpcmp, bnf, bnk, bnm, boot, bor, box, bp, bpd, bpg, bpl, br, brd, brk, browser, brs, bsd, bsdiff, bseq, bsh, bt, btall, btapp, btdb, btl, btn, bto, btr, btrfs, btskin, bud, build, build-id, buildinfo, bundle (mepx), bundler, bvf, bw, bw), bwl, bxlog, bytecode, bz2 (bin/dmg), bza
Cc (cin), c2fr, c32, c4d, ca_, cab (cn_/ex_/is_/msu/sy_), cac, cache (mpc), cachebridge, caffemodel, cag, calibre_msgpack, camp, campackage, camtemplate, cap, capslock, cat (abs/ca_/cache/cat_x64/cat_x86/cbz/cez/csz/ctz/dsa/kcat/p7b/rsa/shl/stl/swz), catalog, caz, cb, cbn, cbp, cc, cc0, cch, ccjk, ccv, ccwmap, ccx, cdd, cdf, cdf-ms, cdmp, cdp, cdr, cdrt (cdr), cdss, cdt (edt), cdx (cjw/cpx), cdxml, cedf, cedilla, cedtheme (authedtheme/aedtheme/medtheme), cer (der/crt/cert), certs, cfc, cfg (imported), cfp (pl), cfs, cfx, cgm, cgp, cha, chi, chk (jcp), chm (chi/swe/por), chp, chs, cht, chw, cifs, cik, cin, cip, cis, ciso, cjcnn, cjk, cjkdmcnn, cjstyle, ck, cki, cl, cl_cache, clang, class (bundle/dylib/jnilib/o), clb, clc, cldms, client, clilibs, clip, cliplibrary, clj, clm_blob, clock, clp, clpi, clr, cls, clw, clx, cly, cmake (cmakein), cmap, cmb, cmd, cmx, cmyk, cnf, cnfg, cnn, cnnmodel, cnt (dta), cnv, co, coder, coffee, cok, col, colors, com, common, compiled, components, compositefont, comss, conf, config (con/default/comments), const, cont, contrib, cookie, cool, cop, copreset, coprinttemplate, coroutineexceptionhandler, costyle, costylebrush, cotooltip, cov, cp, cp4, cpa, cpd, cpf, cpi (cpc), cpio, cpk, cpl (cp_), cpp (cxx/cc/c), cppcheck, cpsh, cpt, cpx, cr2, crk, crl, crmlog, crn, cross, crt (pem/cert/0), cru, crv, crwl, crx (nex), crxd (crx), cs, cset, csf, csg, csh, cshrc, csm, cso, csp, csproj (user), csr, css (css2/css3/css4), cst, csv, ctb, ctd, ctf, ctg, ctl, ctm, ctrlperiod, cty, ctypes, ctz (cat), cu, cube, cuda-lexmap, cuda-theme-syntax, cuda-theme-ui, cue, cur, curve, customdestinations-ms, customui, cva, cvb, cvsh, cw, cwe, cxmod, cz (cs), cze
Dd, da_, dae, dalp, dan, darwin, dat (cdf), data, datatypefactory, db (ht), db_, dbb, dbd, dbf, dbrush, dbt, dbx, dcl, dcm, dcp, dcr, dct, dctl, dctm, dcx, ddj, ddp, dds (dxt), ddsh, de, dea, deb, debian, dec, dectest, def, defs, deny, depend, des, desklink, desktop, detx, deu, dev, device-mapper, devicemetadata-ms, dex, dfa, dfm (lfm), dfp, dfu, dfxp, dgdat, dgml, dgn, dgxpi, diagcab, diagpkg, dic (tlx/hyph), dict, dicu, did, dif, diff, diffbase, din, dir, dit, diz, dj, dj2, djvu (djv), dks, dlc (ini), dlg, dlh (ini), dll (dll64/dll86/dll_x64/dll_x86/cfpi), dlm, dlp, dls, dlz, dmc, dmd (wfm), dmg, dmi, dmp (mdmp), dmraid, dms, dng, dnm (dnm2), dns_resolver, doc (dot/wbk/asd), dock, documentbuilderfactory, docx (docm/dotx/tmdx/tmvx), dof, domimplementationsourcelist, dos, dot (wpt), down_meta, dpl, dpr, dpv, dpx, driver, drl, drv, ds, ds_store, dsc, dsf, dsp, dst, dsw, dta, dtb, dtc, dtd (mod), dtf, dub, dump, dv, dvg, dvx, dwf, dwg, dwr, dwt (aspx), dxf, dxt, dylib, dynamic_transcode, dz
Ee2e, e64, eap, ebc, ebd, ebm, ecf, ecjk, ecw, edb (sdb/stm), edc, editorconfig, edl, eff, efi, efx, egg-info, eh_frame, eh_frame_hdr, el, eld, elf (o/e01/e04/e05/e08/e8b/e09), elm, elp, emcc, emf, eml, emul, emx, enc, ent, env, eof, eop, eot (fntdata), epd, epi, epim, epl, epr, eps (ept/epi/eps2/eps3/epsi), eps2, epsf, epsi, epub, equiv, erb, erl, es, eslintignore, esm (patch), esp, etl (merged), etmpl, ett, eu, eula, euq, eus, eve, example, exc, exe, exp, expected, exr (sxr, ext, extra, exv, eztxml
Ffab, fabpf, fac, fae, far, farconfig, fb2, fb3, fbz, fca, fch, fcjk, fcl, fcpxml, fcrv, fcs, fdb, fdd, fdi, fdoc, fdseq, fdt, fe, feature, feb, feed-ms, feedsdb-ms, fencelayout, feq, ffp, ffpreset (preset), ffx, fi, fig, filesystemprovider, fill (cdws), filter (filters/v16/v17), fin, final, fingerprint, fio, fish, fla, flac (fla), flc, flg, fli, flow, flp, fls, flt, flv, flz, fmc, fmt, fmx, fnc, fns (bm), fnt, fntpack, fo (fon), fodp, fodt, fon, fontdata, fonts, forgewindowlayout, forms, formula, fpage, fpl (fpd/fpu), fpmcp, fpnote, fpt (atn), fr, fr3, fra, frag (cl), freebsd, frg, frm, fs, fs3, fsa, fsa (ab1), fsh, fslang, fst, ft, ftf, fth, ftl, ftu, ftx, ftz, functions, fuskin, fw, fx, fxml, fxo, fxpl
Gg, g4b, gadgeprj, gadget, galleryitems, gb, gbr, gcc, gcnn, gde, gdk-sharp, gdl, gdpr, gds, gen, geom, gfie (gfi), gfs, ggr, gic, gid, gif, gih, git, gitmodules, glb (tlb), glib-sharp, glr, glsl (tbl/fsh), glslesf, glslesv, glsllib, gm (gm2/gm4/qm), gmmp, gms, gnu, go, gold-version, gpa, gpd, gpl, gpr, gra, grain, grd, grid, grl, groovy, grskn, grxml, gs, gsl, gst, gthr, gtk-dotnet, gtk-sharp, gtt, guess, gui, gvi, gyp (fontified), gypi, gz (tgz/svgz/vbox-extpack/nocr/lngx), gza
Hh (32sunu/64sunu/cmakein/cc/c), h1c, h1f, h1k, h1s, h1v, h264, ha, hap, hash, hbaked (hbakedmotionproperties/hbakedproj/hbakedbodyquality/hbakedcurve), hbin, hbs, hcd, hcom, hcp, hdr (pic/rgbe/xyze), hdt, header, heic, helpcfg, heq, hexdwc, hfml, hgl, hgp, hhk (hhc), hhp, hint, his, hkdoc, hky, hl, hlf, hlp, hlsl (psh), host, hpp, hpux, hrc, hrd, hrv, hs, hsp, ht, ht_, hta, htc, html (htm), hu, hun, hxc, hxd, hxf, hxh, hxk, hxl, hxn, hxs, hxt, hxw, hxx, hyb, hyf, hyn, hyp
Ii386, i51, ia64, ib_pdb_index, ibk, ibmc, ibt, icl (dll/icl32), icm (icc), icn (xbg/z), icns, ico (iit), icp, icpr, icr, ics, icu, icx, icxs, id, idb, iddx, identifier, idl, idp, idrc (cnf), ids, idt, idx, idx~0, iec, ieee1394map, ifo, ifs, igdb, igpi, iiq, ilex, ilg, ilut, ima, imagedoc, imagereaderspi, images, ime, img (dmf/ima), iml, imodel, imp, imtpro, imz, in, inc (asp), ind, index, indk, indl, indt, inf (ibz/in_/inf_x64/inf_x86/infdrp/inx/itz/org/org1/sif), inf_loc, info, ini (cfg/txt/v11/v12/v13/v14), input, inputmap, inqscr, ins, installlog, installstate, int, intel, inv, iobj, ion, ipconfig, ipdb, ips, iptc, iqy, irf, iros, irs, irtp, isapnpmap, isf, isl, isn, iso, iss, it, ita, its, itt, itx, iwfl, iwr, izp
Jja, jap, jar (odg/odp/ods), java, jaxbcontext, jb2 (jbig2), jbf, jbg (jbig), jc, jcp (chk), jcsk, jfc, jfm, jgcscs, jmd, jml, jng, joboptions, jp2, jpeg, jpg (jpeg/mask/frame/cof/cot/jps), jpn, js (lua/jsfl), jsb, jsc, jse, jsee, jsfl (js), jshintrc, jsk, jsm, json (jso/sublime-build/sublime-color-scheme/resjson), jsonlz4 (mozlz4/lz4), jsp, jss, jst, jsx, jsxbin, jtp, jtx, jvi, jxa
Kk2, kar, kbd, kc, kcnn, kdb, kdc (nef), kdz, kernel, key (reg/prv/pem/regupd), key_, keys, kfn, kfp (kfpx), kgm, kic, klog, kmc, kmf, kml, kmm, ko (o), komodoproject, kor, kotlin_builtins, kpl (pls), kpz, kra, krd, kse, ksf (zip), ksvlayout, kui, kuip, kwl, kws, kxf, kys
Lla, laf, lan, lang (xaml/po), las, last, lastbuildstate, lau, lay, layer (dessindollhead), layout, lbm (iff), lbmp, lcd, lcf, lcp, ldb, ldconfig, ldd, ldf (lde), lds, leases, less, lex (ths), lexu, lf, lgz, lib (a), library-ms, libzip (zip), lic (txt/licx), license, licp, licx, lint, list, lit, little, lkeys, lktheme, lm (lm1\lm2), lncs, lng (lang), lng_rad, lngc, lnk, loadmodules, loc, local, locale (loc), localfs, locallicense, localnet, lock, log, log1 (log2), loggerbridge, login, look, lpd, lpi, lpm, lrc, lrf, lrmodule, lrplugin, lrtemplate, lrweb, ls, lsa, lsd, lsp (ls), lst, lt, lua, luac, lut, lxa, lz4, lzh
Mm, m3danim, m3u, m3u8, m4, m4a (m4p), m4v (mp4), mac, mak, make, maker, maki, man (config/vbproj), manifest (man/mum/win32manifest/mf), map (inc), mapping, mar, mark, markdown, master, mbn, mbr, mc, mc6, mcd (vwx), mcf, md (cd), md3, md5, md5sums, mdb (ast/mda/mde/mdt/dvflt), mde (mda), mdl, mdp, mds, mdw, mdx, mdz, mea, meh, mem, menu, mepx, mesh, meta, metadata, metadata-v2, metainfo, mf, mfh, mfl (mof), mft, mgc, mht (mbs), mhtml, mi, mid (kar), miff, milk, mingw, mingw32, mip, mips64el, mit, mjv, mk, mkd, mkv, ml, mlfd, mllr, mlr, mlu, mm, mmdb, mmf, mmm, mng, mno (co/cfo/poo/reo/pro/dmo), mnu, mo, mobi (azw3/prc), mod, model, mof (mfl), mogrt, mono, mor, mountd, mov, mox, mp3, mp4 (m4a/m4v/asf/trec/mov), mpcpl, mpg, mpl, mpls, mpn (nib/plist), mpp, mpt, mqres, msbak, msc, msg, mshc, mshi, msi (mst), msix (appx), msk, mskn, msp, msr), msstyles, mst, msu, mswmm, msys, msz, mta, mte, mtl, mtm, mtp, mts (m2ts), mtx, mui, muien-us, multi (alias), mum, mun, mvcmd, mvt, mxaddon, mxc2, mxdh, mxdk, mxdp, mxmd, myapp, mzz
Nn12, na, naf, natvis, nav, ncd, ncl, nct (ncw), ncx, nef, neft, neq, netbsd, netconfig, new, nexe, nfo (ucs), nfs (nfs4), nfx, ngot, ngr, nib (xcuserstate), nim, nix, nlang3, nld, nlog, nlot, nlp (nls), nls (nlp), nlt, nmd (evn), nmp, nmwt (nmwt2), nmwt2, nn, nnm, nnn, noa, nochop, node, nor, normal, npip, nrr, nsh, nsi, nsis, nsla, nsls, nsx, ntdi, ntds, ntf, ntfs, nthd, nu2, nup, nupkg, nus, nuspec, nut (san), nvc, nvi, nvu, nvx, nxp, ny, nycrc
Oo, obi, obj (o/lib), obsolete, oce, ocr, octf, ocx, odb (otr), odc, odf, odl (aodl), odlgz, ods (ott), odt (ott), oem, oemdat, oex, ofi, ofmap, oft, ofx, ogg (ogv), ogm, ogv, olb, old, olf, olp, olut, one, onepkg, onetoc2, onnx (xcodeproj), opa, opc, opf, opg, opml, ops, opt, optimize, options, opts, opus, opx, orb, ori, orp, ort, os2, os4, osa, osf, osp, ot, otf, ott (ots/ods/otg/otp), out, ovl, ovpn, ovr, oxt, oxtproperties
Pp12, p1x, p3e (p3f), p3m, p3r (p3l), p7b, p7x, pa, pac, pack, pages, pak, pal, pan, pango-sharp, params, part1 (part2), pas (imm), passwd, pat, patch, pb, pbf, pbfilespec, pbm, pbv, pbxproj, pbxuser, pbz, pc, pca, pcb, pcc, pcf, pcimap, pck, pckgdep, pcl, pcm, pcx, pdb (idb), pdf (pds/pdt/ai/ait/epdf), pdfaschema, pdi, pdl, pdn, pegjs, pem (cer), pep, peps, perm, persist, pf (ini), pf2, pfb, pff, pfm, pfs, pft (bcw), pfw, pfx, pgm, pgt, phn, php, pic (picio/pixar/pxr), pickle, pif, pig, pig, pima, pimx, pio, pip, pis, pjs, pkg (xar/xip), pki, pl, player, plb, plc, plf, plg, plg64, plgx, plist (nib/tmpreferences/tmtheme/hidden-tmlanguage/lmp/caption/xcsettings/mode1v3), pln (rpln/apln), pls, plt, ply, pm (ix), pma, pmap, pmd, pmf, pmlz, pmp, pmv, pnf, png (kpp/wcp/bytes/vid/img/apng/pes/j2k/j2c/jpt/eits/fpx/p7), pnm, po (pot), poc, pol, policy, poo, pop, pot (prd/prv/pps/dps), ppd, ppi (api), ppkg (gdl), ppm (pnm), ppp (tb1), ppt (pps/pot), pptx (potm/potx/ppsm/ppsx/pptm/prsx/prvx), pqa, pqhero, pr0, pragma, pre, preasm, predefinedimage, pref, prepl, preset, presets, prev, prfpset, prg, prgi, prgraphic, pri, prj, prm, pro, proc, prod, profile, prop, propcol, propdesc, propdesc, properties (cmake), props, proto, protocol, prototxt, provider, prproj, prsl, prt, prtl, prv, prx (bpfile), ps, ps1, ps1xml, ps2, psb, psb, psc1, psd (psb/p3l/p3r/ple/psdt/psp), psd1, pset, psfu (psf), psi, psl, psm1, psmdcp, psp (pspimage), psr, pst (bcs/pcs/prs/sty/psh), pstf, psw, ptb, ptc, pth, ptmp, pts, ptscript, ptv, ptx, pub (jsp), puppet, pvk, pwd, px, px3, pxc, pxd, pxl, pxm, pxs (pxt), py (pyi), pyc, pyd, pyi, pyj, pyo (pyc), pyproj, pyw, pyz
Qq1, qat (officeui), qfx, qip, qm, qml, qmlc (jsc/qml), qmltypes, qoi, qpg, qrb (rcc), qrc, qss, qts, qtx, que
Rr, r0, rad, raf, ram, rap, rar, ras (im1/im24/im32/im8/rast/rs/sr/sun), raswatch, raw, rb (gemspec), rbe, rbl, rbsct, rc, rc16, rc2, rcache, rcc (qrb), rcrc32, rdat, rdb (components), rdf, rdi, rdisc, rdlc, rdoc, rdp, re, reabank, reapeaks, reaperkeymap, reaperosc, reapertheme, reaperthemezip, reascale, rec, recipe, ref, reg (key/regupd), registry, regtrans-ms, reko, rels, removable, reo, rep, res, resjson, resource, resources, ress, resx (mlsxml/xml/resx_amd64), rfa, rfs, rfx, rgb (sgi, rgba (act), rgf, rgs, rgt, rgx, riscos, rk, rl, rla, rld, rle, rll, rmi, rmlan, rna, rnd, rng, rnnn, rollback, rom (bin), rope, rpad, rpd, rpl, rpln, rpm, rpt, rr2, rs, rsa, rsc, rsd, rsdx, rsf, rsm, rsn, rsp, rsrc, rss, rst, rt, rtbw, rtbz, rtf, rttmeta, ru, rul, rule, rules, rum, runtime-xml, rus, rws
Ss, s2k, s2p, sal, sam, sami (smi), sample, sas, sav, saver, saxparserfactory, sbcf, sbin, sbk (swi), sbsasm, sbstore, sbt, sbv, sc, scala, scc, sccd, scf, sch, sched, schema, schema, schemafactory, scitetheme, scm, scmx, sco, scp, scpt, scr, scriptenginefactory, scs, scss (css), sct (cht), sdb, sde, sdf, sdg, sdi, sdkmesh, sdv, sdw, sdx, searchconnector-ms, search-ms, seat, security, seinf, selx, sem, sep, sequ, seriomap, service, ses, session, set, setting, settings, sf, sf2, sfexp (bj), sfi, sfk, sfv, sg, sgi, sgml, sgn, sgs, sh (sample/run/8/8-alpha), sha (sha1), sha1, sha3, sha3-512, shader, shaderprop, shc, she, shg, shiftctrl, shortcuts, shp, shr, shtml, shw, shx, sib, sif, sig, sii, sim, sinfo (ver), sip, size, sk, sk1, skc, skin (skin7), skm, skn, skr, sky, slc, slim, slk (sylk), sln, slp, slv, sm, smali, smp, smrd, sms, smwt, snag, snagpalette, snagt, snagtheme, snagx, snb, sndt, snk, so (node), soc, sod, soe, sofa, softdep, sog, soh, sol, son, spa, spak, spc (sps), spck, spd, speeddial, spf, spi, spi1d, spi3d, spimtx, spkg, spl, splash, spm, spp, spr, sps, spt, spx, sq, sqfm (sq), sqfs, sql, sqlite (apobject/approj/aptheme/asli/bfps/bsm/c3dd/clhs/cmdb/cocatalogdb/cs3o/cscr/data/db/dbd/dbl/khc/kvdb/kvro/localstorage/mfta/mfts/otc/pcb/pcc/pcg/pcs/pmx/prgr/psv/qch/qhc/qmm/rdvdb/rupldb/sal/sdb/session/spwi/spws/sqb/sqlite2/sqlite3/srd/storage/studb/tgm/tlbr/todb/tomd), sqlite-shm (db-shm/db3-shm/srd-shm/kvdb-shm), sqlite-wal (db-wal/db3-wal/kvdb-wal), sqm, sqpreset, src, srs, srt, srw, ssa, ssc, ssf (ptc), ssh, ssp, sst, ssts, st, sta, stamp, stapl, statd, status, stb (opt), stc (otp/stw), std, stderr, stf, stg, sth (stw), sti (odp/ods/otp/ots/ott/std/sti/stw/sxc/sxd/sxg/sxi/sxw/sob/sop), stl, stm, stone, storage_props, store, stp, str, strings, struct, stt, styl, style, stylecap, sub, sublime-menu, sublime-project, sublime-snippet, subtitle, sud, sum, suo, susig, sv (se), sve, svg, svm, svn-work, svp, swa, swc, swf, swidtag, swift, sy_ (ex_/dl_), syl, sym, symbols, symtab, symvers, syntax, sys (mpd/sbz/sez/sy_/sys_backup_x64/sys_backup_x86/sys_x64/sys_x86), sysctl
Tt1, tab, table, tabs, tag, tap, tar (fls/orig), targ (deps), targets (dproj), tasks (overridetasks), tbacct, tbi, tbl, tbr, tbres, tc, tcg, tci, tcl, tcm, tcpip, tcr, tdat (dat/traineddata), tdi (idt), tek, temp, template, tex (pattern), texi, text, textile, textresources, tfc, tflite, tfx (z/bcw), tga, tgs, tgt, tgz, theme, thm (pak), thmx (eftx), thn, thn, ths, tic, tiff (tif/3fr/arw/sr2/svs/ndpi/stk/mos/ptif), tip, titl, tkp, tlb (olb), tlbin (cz), tll, tlog, tlt, tmd (tmv), tmp, tmpfs, tmpl, tmx, tnu, toc, tok, toml, ton, tool, torrent, tpl, tpl2, tpr, tr, tr, trace, train, traineddata (dat), transact, transformerfactory, trb, trd, tree, trk, trn, trs, ts, tscplugin, tscproj (tsctemplate), tscsupport, tse, tsm, tsp, tst (tse), tstemplate, tsv, ttb, ttc (otc), ttf (fnt/tt_/otf), tts, ttt, ttxt, tur, tut, tvp, twk, tx, txcap_blob, txl, txt (adobe/copying/gpl/gpl2/lgpl/lgplv1/lgplv2/lgplv3/md/readme/tx_/utxt), txtst, txtz, typed, types, tz
Uua, uce, ucode, ucp, ucs, uct, udat, udc, udev_retry, udl, udt, uha, uhb, ui, uil, uim, uk, ukr, ult, uni, unilang, unit, unix (mak/in), unp, unt, uot (uop/uos), up_meta_secure, upcall, update, upp, url, urrs, usage, usbmap, user, usf (usflib), utf8, utx, utxt, uue, uvp
Vv, v1, v2 (js), val, var, vb, vbe, vbo, vbp, vbs, vch, vcproj, vcwin32, vcwin-arm64, vcxproj (v16/v17), vdc, vdex, vdf, vdi, vdj, vdm (lkg), vdplugin (vdf), vdw, veg, version (vert), vf, vfs, vfs0, vfx, vfx1, vg, vhd, vhdx, vic, vicar, vid, vip (fst), vkm, vkt, vlcl, vlng, vlpset, vlt, vm, vmd, vmdk, vms, vmsg, vob, voc, vor (sdw), vp, vp9, vpk, vpl, vpol, vpr, vpx, vpy, vrd, vrg, vs_2_0, vs_2_0, vsb, vsd (vss/vst/vdw), vsdx (vsdm/vssm/vssx/vstm/vstx), vsf, vsh, vsix, vsixmanifest, vsl, vst, vst3, vst3, vstatemplate, vstax, vsto, vstpreset, vsx (xml_), vtc, vtm, vtm, vtt, vtv, vue, vwp, vxml
Ww5s, w6c, wac, wal, wap (wbmp), wasm, wat, watchr, wav (bwf/nrw), wbm, wbmp, wcd, wcm, wcp, wcx, wdp, wdx, web, webm, webp (web), wep, wer, wfd, wfm, wfo, wfv, wfx, whl, whs, wih, wim (wim2/swm/esd/ppkg), winkeys, winmd (efi), winmdobj, wkt, wld, wlx, wlz, wma, wmc, wmdb, wmf, wmi, wmo, wms, wmv (wma), wmz, wngfx, woff, woff2, wpg (hyd/cbt), wpj, wpl, wprp, wpt, wrap, wrd, wrk, wrl, wsc, wsdd, wsf, wsh, wsk, wskn, wsplugin, wswdb, wsz, wtl, wul, wve, wwd
Xx, x32, x3d, x3db, x3dv, x86_64, xaml (style), xap, xas, xautopf, xba, xbap, xbf, xbl, xbm, xcbkptlist, xcd, xcf, xcl, xclangspec, xcm, xcs, xcscheme, xcu, xcworkspacedata, xd, xdb, xdc, xdl, xdr, xe, xfm, xfs, xg0, xgeq, xgm, xhp, xhtml (html/tml/htpl), xib, xif, xiph, xlb, xlc, xls (xla/xlt/xls2), xls2, xlsx (pmdx/pmvx/xlam/xlsb/xlsm/xltm/xltx), xlt, xm, xmb, xmd, xml, xmlc, xmlgui, xmlz, xmp, xmrlang, xmrpres, xms, xnf, xnormodel, xnp, xpfwext (xefwext), xpi, xpm (picon), xps, xpt, xql (xqm/xqy), xrc, xrm-ms (nls/p7b/p7x/pri/sch/xaml/xbf/xrm/ppkg), xsd, xsf, xsfs, xshd, xsl (xslt/xsd/xbf/nls/pri/sch/xaml/ppkg), xslt (xls), xsn, xspf, xss, xst, xsubtitle, xul, xxe, xxx, xz
Yy, yaml (yml/sublime-syntax), yardopts, yfx, yml, yprt, yt, ytf, yti, ytr, yy, yz1, yz2
Zz77, zdct (zbin), zdli, zeg, zfsendtotarget, zi, zip, zlx, zmd, zmdownload, zmf, zmfragcfg, zoom, zpaq, zpl, zvt, zxp, zzl



Дополнение:

Конечно это не 100% определение так как:
  - одни и те же типы могут иметь разное содержание (текстовое/бинарное) и сигнатуру...
  - разные типы могут иметь одинаковую начальную сигнатуру...

100%-го определения быть не может , но если этот инструмент поможет восстановить половину важных файлов, то значит всё не зря...



Последовательность распознавания:

  1. Исполняемые файлы (типа exe, dll, mui, ...):
     - в таких файлах ищется оригинальное расширение в заголовке файла в полях "InternalName" и "OriginalFilename", некоторые файлы можно определить по комментарию "FileDescription" (см. команду versn)
     - если оригинальное расширение не найдено, то определить какой именно исполняемый файл не всегда представляется возможным, т.к. exe может быть любым из типов: 8bf, 8bi, 8bx, 8by, 8li, 8me, acm, aip, ape, auo, bpl, cer, ciso, com, cpl, dll, driver, drv, ds, efi, fil, flt, ia64, icl, iec, ime, lex, lkg, mgc, node, ocx, olb, pig, plg, rll, rs, scr, svp, sys, tlb, tsp, unp, vdf, vdm, vdplugin, vwp, w5s, w6c, wac, wcx, wdx, wfx, wlx, x32, x3d, xnp и т.д.
     - для определения некоторых исполняемых файлов происходит поиск уникальной информации в ресурсах "VERSION", "MANIFEST", "BITMAP", "301", "MUI", "SKIN", "ZDCT" и других.
     - для определения некоторых файлов происходит поиск в дополнительных свойствах (см. infos=3||18).
     - для определения некоторых исполняемых файлов используется плагин Total7zip.wcx, который прописывается в TCIMG.ini (TCIMGU.ini) в секции [Programs].
     - если exe является sfx архивом, то есть параметры возвращения типа файла.
     - для определения некоторых типов dll используется поиск "функций" внутри файла (ряд плагинов/приложений имеют одинаковые функции по которым можно определить общий тип, см. infos=3||16).
(возможно позже найдутся более действенные методы для определения исполняемых файлов)

Пример записи:

[Programs]
; Total7zip - архиваторный плагин на основе 7-ZIP, скачать
Total7zip=%COMMANDER_PATH%\Plugins\Wcx\Total7zip\Total7zip.wcx


  2. Ряд файлов являются zip архивами, они определяются по структуре архива. При одинаковой структуре возвращается первый тип из таблицы: xlsx (pmdx/pmvx/xlam/xlsb/xlsm/xltm/xltx), т.е. возвращается расширение "xlsx".

  3. Для текстовых файлов:
     - производится поиск расширения в начальных комментариях файлов: ahk, au3, bsh, c, chp, cmd, coder, conf, cpp, cs, csh, def, fish, gdl, h, hrc, hxx, ini, js, jsx, kmm, la, ldf, lng, lsp, lst, m, obj, pis, properties, ps1, psd1, rc2, s, sal, sip, sql, targets, tcg, tch, tci, tcm, vbs, wsf, xls, и др.
     - в скриптовых файлах тип определяется по уникальным операторам (если это возможно).
     - в различных xml файлах тип определяется по уникальным тегам.
     - в других файлах тип определяется по уникальным фразам, разметке, структуре, ... файла.

  4. При одинаковой сигнатуре возвращается первый тип из таблицы sqlite (sqlite2/sqlite3), т.е. возвращается расширение "sqlite"



   Функционал определения расширения тестируется, будет улучшаться по мере нахождения неточностей.

   Если какие-либо файлы определяются неправильно, то вы можете их прислать для исправления.

   Сейчас определяется более 2500 типов файлов, некоторые типы проверяются по разным условиям (к примеру, команда определяет более 200 видов log, dic, lng, dat, bin, inf, cfg, conf, lang файлов, файлов субтитров и др.), созданных различными программами.

   При этом команда работает довольно быстро, т.к. поиск происходит с регулярными выражениями по начальным данным файла, а база данных base.dll размером всего 500Kb (в отличие от других программ).
    - исполняемые файлы, в которых есть точные метаданные обрабатываются примерно 60-100 файлов в секунду.
    - бинарные файлы обрабатываются примерно 50-130 файлов в секунду.
    - текстовые файлы обрабатываются примерно 5-50 файлов в секунду (все зависит от содержимого).
    - замедлить работу может большой архивный файл (типа cab, iso, jar), из которого не всегда быстро извлекается структура объектов для его определения.

   Чтение и проверка условий в файлах производится поэтапно:
    - в бинарных файлах читается первые 16, 32, 512 байта, для некоторых файлов требуется чуть больше.
    - в текстовых файлах читается первые 32, 64, 512, 1024 символов, максимальное чтение файла 100Kb.

   Можно добавить и другие типы файлов, но у меня их нет на компьютере, высылайте в архиве по 5-10 файлов одного типа, возможно получиться их распознать. Тем самым вы поможете создать хороший инструмент для восстановления данных.



Если вы создаёте файлы для своих проектов и хотите, чтобы они распознавались, то:

  a) Для текстовых файлов рекомендуется в начале прописывать то, что будет отличать их от других, к примеру:
    - уникальные комментарии/фразы (LIBRARY_A_B_C, PROJECT_A_B_C).
    - реальное имя файла с расширением, особенно для скриптовых файлов (' Test.vbs, /// Test.js, ; Test.ahk, ; Test.ini).
    - уникальную секцию/ключи для ini и подобных файлов ([TEST_A_B_C], [1_2_3_4_5]).
    - уникальные теги для xml/html и подобных файлов (<ClassABC>).
    - уникальную структуру файла или дату в оригинальном формате (в файлах log).

  b) Для бинарных файлов рекомендуется в начале создавать уникальную сигнатуру (набор байтов, обеспечивающий идентификацию типа файла), к примеру: 535F55504552, если открыть такой файл в блокноте, то в начале увидим S_UPER.

  c) Если вы создаёте архивы zip и при этом расширение архивов переименовываете, то для того, чтобы они распознавались необходимо в корне архива создавать уникальное имя каталога или файла.

  d) Если вы создаёте плагины/приложения с сигнатурой схожей с exe файлами необходимо прописывать в ресурс "Version Info" точные данные файла в поля "OriginalFilename" или "InternalName" (к примеру: "Plugin.qqq") - тогда проблем не будет с распознаванием расширения такого файла.

Всё это позволяет без особого труда идентифицировать файлы при восстановлении расширения.
Если какие-либо ваши файлы не распознаются, то вы так же можете их прислать для добавления условий в базу данных.



Некоторые программисты и программы намерено искажают данные файлов и их расширения (или делают похожими файлы под другие типы), чтобы их было невозможно определить - ну тут уж ничего не поделаешь - не хотят так не хотят ☺.

В некоторых программах:
  - форматы jpg, bmp, zip, mp3, ... могут быть переименованы в типы dat, bin и др.
  - скриптовые форматы h, js, xml, ini, ... могут быть переименованы в типы txt, diz, dat и др.
  - исполняемые форматы exe, dll, ... могут быть переименованы в типы 000, 001, upx и др.
  - форматы данных sqlite ... могут быть переименованы в типы sqlite1, sqlite2, db, sdb и др.
  - форматы изображений могут изменяться bmp в png, jpg в gif и т.д. и наоборот.
  - так же у форматов может быть просто намерено удалено расширение.
  - некоторые пользуются "старым" советом и переименовывают текстовые файлы txt, rtf и др. в тип doc, чтобы файл открывался MS Office
При определении таких файлов будет возвращено оригинальное расширение.

Некоторые типы файлов невозможно или нет смысла определять:
  - текстовые файлы общей информации: csv, txt, dic, diz, keys, ... (если они не имеют точную начальную информацию)
  - бинарные файлы общей информации: dat, data, bin, db, ...
  - файлы с зашифрованной информацией: crypt, ...
  - файлы различных лицензионных ключей: key, ...
  - файлы бэкапа: bacup, bak, bkp, bk, log_backup, ...
  - файлы кэша: br, br64, br120, ...
  - временные файлы: tmp, temp, old, ...
  - файлы без уникальных сигнатуры/разметки.

Если тип файла не определён, то будет возвращено "пустое" расширение. Но можно это настроить в подпараметрах, см. выше: для текстовых и бинарных файлов отдельное расширение.





© Аверин Андрей для Total Commander Image  Averin-And@yandex.ru