metafind

module
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 17, 2025 License: MIT

README

metafind

❯ mf --help
mf -- search files by metadata

mf searches for files using metadata.
The search criteria utilizes Expr (https://expr-lang.org/).
If the expression is not specified or if the expression evaluates to true,
the path of that file will be displayed.

The following results are considered true when evaluating the expression:
- boolean true
- non-zero numeric value
- non-empty string, map, or array

Available inputs:
- basename: name but ext
- basepath: path but ext
- dir: All but the last element of path
- ext: The file name extension
- mod_time: The last modification time of the file
- mod_time_ts: The last modification timestamp of the file
- mode: The file permissions (in octal)
- name: The name of the file
- path: The path of the file
- size: The file size (in bytes)
- root: The zip file path (zroot)
- relpath: The relative path of file in zip (zroot)
- compressed_size: The compressed size of the file (in bytes, zroot)
- uncompressed_size: The uncompressed size of the file (in bytes, zroot)
- comment: The user-defined string (zroot)
- non_utf8: If true, indicates relpath and comment are not encoded in UTF-8 (zroot)

You can add inputs by specifying 'probe'.
The 'probe' is invoked with the path to the target file (1st argument).
You can use the macros within the script.

- @ARG is replaced with "$1"
- @RAWARG is replaced with $1

And the 'probe' must output a JSON string or in the form "key=value" to standard output like:
  {"key": "value"}

  key1=value1
  key2=value2

The keys for the inputs available in the expression will be 'pN' for the N-th 'probe'.

Examples:

# Dump metadata
mf -r SOME_DIR -v
# Search path by regexp
mf -r SOME_DIR -e 'path matches "green"'
# Exclude by expr
mf -r SOME_DIR -x 'path matches "green"'
# Add metadata
mf -r SOME_DIR -e 'p0.p matches "green"' -p 'echo "{\"p\":\"@ARG\"}"'
# Add named metadata
mf -r SOME_DIR -e 'key.p matches "green"' -p 'echo "{\"p\":\"@ARG\"}"' --pname 'key'
# Add equal pair metadata
mf -r SOME_DIR -e 'key.p matches "green"' -p 'echo "p=@RAWARG"' --pname 'key'
# Read paths from stdin
echo SOME_DIR | mf -r - -v
# Read metadata
mf -i METADATA_FILE -e 'path matches "green"'
# Envvars
ROOT=SOME_DIR EXPR='size==0' mf
# Format by expr
mf -r SOME_DIR -f '{n:name,s:size}'
# Search name by regexp in zip
mf -z SOME.zip -e 'name matches "green"'
Flags:

  -c, --config string    Config file.
                         example:
                         
                         # root directories (default: [.])
                         root:
                           - ROOT1
                         # shell command (default: [sh])
                         sh:
                           - bash
                         probe:
                           - ffprobe -v error -hide_banner -show_entries format -of json=c=1 @ARG
                         expr: |
                           name matches '\.m4a$'
      --debug            Enable debug logs
  -x, --exclude string   Expression of expr lang to reject entries before probe. Read expr from FILE by '@FILE'
  -e, --expr string      Expression of expr lang to select entries. Read expr from FILE by '@FILE'
  -f, --format string    Expression of expr lang to format output. Read expr from FILE by '@FILE'
  -i, --index string     Read metadata from the specified files instead of scanning the directory. Read metadata from stdin by -; separated by ';'
  -o, --out string       Output file. - means stdout
      --pname string     Probe script name. Change metadata name; separated by ';'
  -p, --probe string     Probe script. The script should write json to stdout, called by passing the filepath as the 1st argument. Read script from FILE by '@FILE'; separated by '#'
  -q, --quiet            Quiet logs except ERROR
  -r, --root string      Root directories. - means stdin; separated by ';' (default ".")
      --sh string        Shell command for probe; separated by ';' (default "sh")
  -v, --verbose          Verbose output. Output metadata to stdout and metrics to stderr
  -w, --worker int       Worker num (default 8)
  -z, --zroot string     Zip files: separated by ':'

Directories

Path Synopsis
cmd
mf command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL