Cross Platform File and Folder management tool
Ordo is a cross-platform command-line tool for advanced file and directory management. Built in Java with Picocli, it offers safe and powerful batch operations including listing, renaming, transferring (move/copy), and deletion with comprehensive filtering and safety mechanisms.
Designed for developers, power users, and anyone managing large collections of files (photos, documents, project assets, downloads), Ordo emphasizes usability, predictability, and protection against accidental data loss.
Current scope
Ordo is focused on basic but powerful file operations in the terminal:
If you have ideas, suggestions, or want something specific — open an issue or drop a comment.
git clone https://github.com/shawshank725/ordo.git
cd ordo
mvn clean package.target/ directory.alias ordo="java -jar /path/to/ordo.jar".ordo --help.GraalVM is used to build a standalone native executable for this CLI tool.
.tar.gz archive.tar -xvf graalvm-*.tar.gznano ~/.bashrcexport JAVA_HOME=/path/to/graalvm
export PATH="$JAVA_HOME/bin:$PATH"
source ~/.bashrcjava --version. The output should match
Java(TM) SE Runtime Environment Oracle GraalVM
native-image is installed:native-image --version.mvn clean package
mvn -Pnative package
Note: The first native build may take several minutes.
target/ directory. Open terminal in the directory target.chmod +x ordo.ordo../ordo) shows incomplete --help output for subcommandsSymptom
./ordo rename --help shows only -h/-V options, missing your custom flags (like -r, -dc, etc.).
The JAR version (java -jar ordo.jar rename --help) works fine.
Cause
GraalVM native-image removes reflection info unless explicitly registered. Picocli’s option discovery for subcommands relies on it.
Fix (already included in the project)
The src/main/resources/META-INF/native-image/reflect-config.json file registers all subcommand classes + fields.
If you fork/build from source and still see this:
"allDeclaredFields": true for each subcommandmvn clean package -PnativeThis is a common GraalVM + Picocli gotcha — reported in several issues (e.g., picocli#1916, #2357).
The config file is the standard workaround.
build-essential + zlib1g-dev on Linux.reflect-config.json (already done here).ordo rename. To get help, use ordo rename --help.Usage: ordo rename [-hrsV] [-dc=<dateCreated>] [-ext=<extension>]
[-gsz=<greaterThanSize>] [-lsz=<lessThanSize>]
[-nn=<newNamePattern>] [-pfx=<prefix>] [-sfx=<suffix>]
<targets>...
Batch rename files with patterns
<targets>... Files or glob patterns to rename
-dc, --datecreated=<dateCreated>
Adding date to filter the files and folders.
-ext, --extension=<extension>
Extension to filter out the files.
-gsz, --greaterthansize=<greaterThanSize>
Filter out files and folders having size greater than the
one provided.
-h, --help Show this help message and exit.
-lsz, --lessthansize=<lessThanSize>
Filter out files and folders having size less than the one
provided.
-nn, --newname=<newNamePattern>
New name (simple rename) or pattern (e.g., photo-{seq})
-pfx, --prefix=<prefix>
Add prefix to original names
-r, --recursive Recursive means that any folder and subsequent subfolders
will be affected.
-s, --seq Add sequential number (use {seq} in pattern)
-sfx, --suffix=<suffix>
Add suffix to original names
-V, --version Print version information and exit.
ordo rename bro/ file.txt --newname="file {seq}" -s -rordo delete. To get help, write: ordo delete --help.Usage: ordo delete [-hprV] [-df] [-fno] [-dc=<dateCreated>] [-ext=<extension>]
[-gsz=<greaterThanSize>] [-lsz=<lessThanSize>] [<targets>...]
Delete files matching filters (safe by default, moves to trash if possible)
[<targets>...] Folder path(s) or file globs (default: current
directory)
-dc, --datecreated=<dateCreated>
Filter by creation date (YYYY-MM-DD)
-df, --deletefolders Delete folders as well
-ext, --extension=<extension>
Filter by file extension
-fno, --filenameonly Show only file names in output
-gsz, --greaterthansize=<greaterThanSize>
Filter files larger than size (in MB)
-h, --help Show this help message and exit.
-lsz, --lessthansize=<lessThanSize>
Filter files smaller than size (in MB)
-p, --permanent Permanently delete (bypass trash/recycle bin)
-r, --recursive Search for files and folders recursively inside
directories
-V, --version Print version information and exit.
ls does.ordo list. By default it lists files in the current directory. Options can be provided like extensions, size, etc.Usage: ordo list [-hrV] [-fno] [-dc=<dateCreated>] [-ext=<extension>]
[-gsz=<greaterThanSize>] [-lsz=<lessThanSize>]
[<folderPath>...]
List files meeting certain conditions
[<folderPath>...] Folder path
-dc, --datecreated=<dateCreated>
Adding date to filter the files and folders.
-ext, --extension=<extension>
Extension to filter out the files.
-fno, --filenameonly Adding this prints only the file names (skips the
folder name).
-gsz, --greaterthansize=<greaterThanSize>
Filter out files and folders having size greater
than the one provided.
-h, --help Show this help message and exit.
-lsz, --lessthansize=<lessThanSize>
Filter out files and folders having size less than
the one provided.
-r, --recursive Recursive means that any folder and subsequent
subfolders will be affected.
-V, --version Print version information and exit.
Usage: ordo open [-hV] [<path>]
Open a file or folder using the system default application
[<path>] File or folder path to open (default: current directory)
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
Usage: ordo transfer [-chmrV] [-d=<destination>] [-dc=<dateCreated>]
[-ext=<extension>] [-gsz=<greaterThanSize>]
[-lsz=<lessThanSize>] <from>...
Batch transfer files with certain conditions
<from>... Files or glob patterns to rename
-c, --copy Copy files (keep source)
-d, --destination=<destination>
Destination folder
-dc, --datecreated=<dateCreated>
Adding date to filter the files and folders.
-ext, --extension=<extension>
Extension to filter out the files.
-gsz, --greaterthansize=<greaterThanSize>
Filter out files and folders having size greater than the
one provided.
-h, --help Show this help message and exit.
-lsz, --lessthansize=<lessThanSize>
Filter out files and folders having size less than the one
provided.
-m, --move Move files (cut - delete source)
-r, --recursive Recursive means that any folder and subsequent subfolders
will be affected.
-V, --version Print version information and exit.
Feel free to open an issue if something breaks — happy to help!