1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-06-17 00:07:37 +02:00
Files
jc/docs/parsers/ls.md
Kelly Brazil 1d0ad2f045 doc fixes
2021-01-04 18:01:16 -08:00

4.2 KiB

jc.parsers.ls

jc - JSON CLI output utility ls and vdir command output parser

Options supported:

  • lbaR
  • --time-style=full-iso
  • -h: File sizes will be available in text form with -r but larger file sizes with human readable suffixes will be converted to Null in the default view since the parser attempts to convert this field to an integer.

Note: The -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 -l or -b is not used. Alternatively, vdir can be used, which is the same as running ls -lb.

Usage (cli):

$ ls | jc --ls

or

$ jc ls

Usage (module):

import jc.parsers.ls
result = jc.parsers.ls.parse(ls_command_output)

Compatibility:

'linux', 'darwin', 'cygwin', 'aix', 'freebsd'

Examples:

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

$ 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"
  },
  {
    "filename": "arch",
    "flags": "-rwxr-xr-x.",
    "links": 1,
    "owner": "root",
    "group": "root",
    "size": 33080,
    "date": "Aug 19 23:25"
  },
  ...
]

$ 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"
  },
  {
    "filename": "awk",
    "link_to": "gawk",
    "flags": "lrwxrwxrwx.",
    "links": "1",
    "owner": "root",
    "group": "root",
    "size": "4",
    "date": "Aug 15 10:53"
  },
  {
    "filename": "base64",
    "flags": "-rwxr-xr-x.",
    "links": "1",
    "owner": "root",
    "group": "root",
    "size": "37360",
    "date": "Aug 19 23:25"
  },
  {
    "filename": "basename",
    "flags": "-rwxr-xr-x.",
    "links": "1",
    "owner": "root",
    "group": "root",
    "size": "29032",
    "date": "Aug 19 23:25"
  },
  {
    "filename": "bash",
    "flags": "-rwxr-xr-x.",
    "links": "1",
    "owner": "root",
    "group": "root",
    "size": "964600",
    "date": "Aug 8 05:06"
  },
  ...
]

$ ls -l /usr/bin | jc --ls | jq '.[] | select(.size > 50000000)'
{
  "filename": "emacs",
  "flags": "-r-xr-xr-x",
  "links": 1,
  "owner": "root",
  "group": "wheel",
  "size": 117164432,
  "date": "May 3 2019"
}

info

info()

process

process(proc_data)

Final processing to conform to the schema.

Parameters:

proc_data:   (List of Dictionaries) raw structured data to process

Returns:

List of Dictionaries. Structured data with the following schema:

[
  {
    "filename": string,
    "flags":    string,
    "links":    integer,
    "parent":   string,
    "owner":    string,
    "group":    string,
    "size":     integer,
    "date":     string
  }
]

parse

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

Main text parsing function

Parameters:

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

Returns:

List of Dictionaries. Raw or processed structured data.