Skip to the content.

Home

jc.parsers.ls

jc - JSON Convert ls and vdir command output parser

Options supported:

Note: The -1, -l, or -b option of ls should be used to correctly parse filenames that include newline characters. Since ls does not encode newlines in filenames when outputting to a pipe it will cause jc to see multiple files instead of a single file if -1, -l, or -b is not used. Alternatively, vdir can be used, which is the same as running ls -lb.

The epoch calculated timestamp field is naive. (i.e. based on the local time of the system the parser is run on)

The epoch_utc calculated timestamp field is timezone-aware and is only available if the timezone field is UTC.

Usage (cli):

$ ls | jc --ls

or

$ jc ls

Usage (module):

import jc
result = jc.parse('ls', ls_command_output)

Schema:

[
  {
    "filename":     string,
    "flags":        string,
    "links":        integer,
    "parent":       string,
    "owner":        string,
    "group":        string,
    "size":         integer,
    "date":         string,
    "epoch":        integer,     # [0]
    "epoch_utc":    integer      # [1]
  }
]

[0] naive timestamp if date field exists and can be converted.
[1] timezone aware timestamp if date field is in UTC and can
    be converted.

Examples:

$ ls /usr/bin | jc --ls -p
[
  {
    "filename": "apropos"
  },
  {
    "filename": "arch"
  },
  ...
]

$ ls -l /usr/bin | jc --ls -p
[
  {
    "filename": "apropos",
    "link_to": "whatis",
    "flags": "lrwxrwxrwx.",
    "links": 1,
    "owner": "root",
    "group": "root",
    "size": 6,
    "date": "Aug 15 10:53"
  },
  {
    "filename": "ar",
    "flags": "-rwxr-xr-x.",
    "links": 1,
    "owner": "root",
    "group": "root",
    "size": 62744,
    "date": "Aug 8 16:14"
  },
  ...
]

$ ls -l /usr/bin | jc --ls -p -r
[
  {
    "filename": "apropos",
    "link_to": "whatis",
    "flags": "lrwxrwxrwx.",
    "links": "1",
    "owner": "root",
    "group": "root",
    "size": "6",
    "date": "Aug 15 10:53"
  },
  {
    "filename": "arch",
    "flags": "-rwxr-xr-x.",
    "links": "1",
    "owner": "root",
    "group": "root",
    "size": "33080",
    "date": "Aug 19 23:25"
  },
  ...
]

parse

def parse(data, raw=False, quiet=False)

Main text parsing function

Parameters:

data:        (string)  text data to parse
raw:         (boolean) unprocessed output if True
quiet:       (boolean) suppress warning messages if True

Returns:

List of Dictionaries. Raw or processed structured data.

Parser Information

Compatibility: linux, darwin, cygwin, aix, freebsd

Source: jc/parsers/ls.py

Version 1.12 by Kelly Brazil (kellyjonbrazil@gmail.com)