Skip to content

Minyus/recurtx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

134 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

recurtx

Python version PyPI version License

CLI to recursively search and transform text files in xargs style

Key features

  • search and substitute (replace) text in file contents or file paths in place
  • installable without sudo (using pip)

Background

This tool was developed as an opinionated (partial) alternative to the following CLI tools.

  • find to recursively find file paths
  • fd to recursively find file paths respecting .gitignore (fd is internally used by xunder and xbatch in default if installed)
  • grep to search text
  • rg to search text
  • ag to search text
  • sed to modify text
  • xargs to repeat similar to for-loop
  • tree to recursively check file paths
  • du to check disk usage
  • csvkit to search (and modify) text in csv files
  • spyql to search (and modify) text in csv files
  • clickhouse-local
  • polars-cli to search text in csv files
  • csvlens to view csv files
  • rich-cli to view csv files

This tool is quicker to write although execution might be slower depending on the amount of your text data.

Install

Prerequisite: Python 3 (3.8 or later recommended)

[Option 1] Install from PyPI

pip install recurtx

[Option 2] Install from source code

This is recommended only if you want to modify the source code.

git clone https://github.com/Minyus/recurtx.git
cd recurtx
python setup.py develop

Wrapper Commands

xunder

Run any scripts for each file under a directory recursively.

Examples

Run wc -l {FILEPATH} for each file under directory_foo recursively:

xunder directory_foo "wc -l"

Quoting for the script can be omitted for most cases.

xunder directory_foo wc -l

Caveat: int, float, tuple, list, dict could be formatted unexpectedly (by fire package), for example:

  • 00 (recognized as int by Python) will be converted to 0 while "00" (recognized as str by Python) will be kept as is

Description

NAME
    xunder

SYNOPSIS
    xunder PATH <flags> [SCRIPTS]...

POSITIONAL ARGUMENTS
    PATH
        Type: str
    SCRIPTS
        Type: str

FLAGS
    --glob=GLOB
        Type: str
        Default: '**/*'
    --replace_str=REPLACE_STR
        Type: str
        Default: '@@'
    --show_paths=SHOW_PATHS
        Type: bool
        Default: False
    --show_scripts=SHOW_SCRIPTS
        Type: bool
        Default: False

NOTES
    You can also use flags syntax for POSITIONAL ARGUMENTS

xbatch

Run any scripts for a batch of files in a directory recursively.

Examples

Concatenate all the contents in directory_foo.

xbatch directory_foo cat

Description

NAME
    xbatch

SYNOPSIS
    xbatch PATH <flags> [SCRIPTS]...

POSITIONAL ARGUMENTS
    PATH
        Type: str
    SCRIPTS
        Type: str

FLAGS
    --glob=GLOB
        Type: str
        Default: '**/*'
    --replace_str=REPLACE_STR
        Type: str
        Default: '@@'
    --show_paths=SHOW_PATHS
        Type: bool
        Default: False
    --show_scripts=SHOW_SCRIPTS
        Type: bool
        Default: False

NOTES
    You can also use flags syntax for POSITIONAL ARGUMENTS

Commands to transform text files

xsearch

Search a keyword, which may include wildcards, in the text file content, and optionally substitute (replace).

Examples

Search keyword_bar in each file under directory_foo recursively:

xunder directory_foo xsearch keyword_bar

Search keyword_bar and substitute (replace) with keyword_baz in each file under directory_foo recursively:

xunder directory_foo xsearch keyword_bar --sub keyword_baz

Description

NOTES
    You can also use flags syntax for POSITIONAL ARGUMENTS

NAME
    xsearch - Search a keyword, which may include wildcards, in the text file content, and optionally substitute (replace).

SYNOPSIS
    xsearch TARGET PATH <flags>

DESCRIPTION
    Search a keyword, which may include wildcards, in the text file content, and optionally substitute (replace).

POSITIONAL ARGUMENTS
    TARGET
        Type: str
    PATH
        Type: str

FLAGS
    --sub=SUB
        Type: Optional[typing.Unio...
        Default: None
    -w, --wildcard=WILDCARD
        Type: str
        Default: '*'
    --separator=SEPARATOR
        Type: str
        Default: '/'
    -v, --verbose=VERBOSE
        Type: int
        Default: 1
    -c, --context=CONTEXT
        Type: typing.Union[int, NoneType]
        Default: 1
    -p, --plain=PLAIN
        Type: bool
        Default: False

NOTES
    You can also use flags syntax for POSITIONAL ARGUMENTS

xfind

Find a keyword, which may include wildcards, in the file path, and optionally substitute (replace).

Examples

Search keyword_bar in each file path under directory_foo recursively:

xunder directory_foo xfind keyword_bar

Search keyword_bar and substitute (replace) with keyword_baz in each file path under directory_foo recursively:

xunder directory_foo xfind keyword_bar --sub keyword_baz

Description

NAME
    xfind

SYNOPSIS
    xfind TARGET PATH <flags>

POSITIONAL ARGUMENTS
    TARGET
        Type: str
    PATH
        Type: str

FLAGS
    -s, --sub=SUB
        Type: Optional[str]
        Default: None
    -w, --wildcard=WILDCARD
        Type: str
        Default: '*'
    -v, --verbose=VERBOSE
        Type: int
        Default: 1

NOTES
    You can also use flags syntax for POSITIONAL ARGUMENTS

xll

Alternative to ls -lah and du. Show approximate total size and max size in Bytes to respond quickly in default while it takes time to run du in a big directory including many files. Show number of files and the most common file extention(s) as well.

Examples

Run under directory_foo non-recursively (up to depth 1):

xll directory_foo

Run under directory_foo recursively up to depth 2:

xll -d 2 directory_foo

Description

NAME
    xll - Compute statistics for the directory recursively.

SYNOPSIS
    xll <flags> [PATHS]...

DESCRIPTION
    Compute statistics for the directory recursively.

POSITIONAL ARGUMENTS
    PATHS
        Type: str

FLAGS
    -d, --depth=DEPTH
        Type: int
        Default: 1
    -u, --unit_glob=UNIT_GLOB
        Type: str
        Default: '**/*'
    -t, --type=TYPE
        Type: Optional[typing.Unio...
        Default: None
    -g, --glob=GLOB
        Type: str
        Default: '**/*'
    -r, --regex=REGEX
        Type: str
        Default: '^(?!.*(\\.git\\/|__pycache__\\/|\\.ipynb_checkpoints\\/|\\....
    -n, --number_limit=NUMBER_LIMIT
        Type: int
        Default: 100
    -s, --sort_paths=SORT_PATHS
        Type: str
        Default: 'asc'
    -i, --info=INFO
        Type: bool
        Default: True
    -e, --extension_most_common=EXTENSION_MOST_COMMON
        Type: int
        Default: 1

xpandas

Read and transform tabular data using pandas.

Regarding options, see the documents for pandas.read_xxx such as:

Data types supported by pandas (not all were tested):

  • "pickle"
  • "table"
  • "csv"
  • "fwf"
  • "clipboard"
  • "excel"
  • "json"
  • "html"
  • "xml"
  • "hdf"
  • "feather"
  • "parquet"
  • "orc"
  • "sas"
  • "spss"
  • "sql_table"
  • "sql_query"
  • "sql"
  • "gbq"
  • "stata"

Install dependency

pip install pandas

Examples

Read files supported by pandas (such as csv and json) under directory_foo and concatenate:

xbatch directory_foo xpandas

xpolars

Read and transform tabular data using polars.

Regarding options, see the documents for polars.scan_xxx (or polars.read_xxx if scan function is not available), such as:

Data types supported by polars (not all were tested):

  • "csv"
  • "ipc"
  • "parquet"
  • "database"
  • "json"
  • "ndjson"
  • "avro"
  • "excel"
  • "delta"

Install dependency

pip install polars

Examples

Read files supported by polars (such as csv and json) under directory_foo and concatenate:

xbatch directory_foo xpolars

Dependency to enable CLI

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages