Crates.io | clineup |
lib.rs | clineup |
version | 0.2.5 |
source | src |
created_at | 2023-09-06 17:12:46.557045 |
updated_at | 2023-12-04 14:49:27.281916 |
description | A command-line utility for organizing media files |
homepage | |
repository | https://github.com/antscloud/clineup |
max_upload_size | |
id | 965500 |
size | 309,635 |
Clineup (pronounced "clean up") is the fusion of "CLI" (Command-Line Interface) and "clean up."
It is a Rust-based CLI utility aimed at providing pragmatic programmable media rearrangement.
Inspired by Elodie but with some differences and extra-features :
cargo install clineup
You can download the pre-built binary for your platform from the Release page
For example, for Linux, you can use the following command :
curl -L https://github.com/antscloud/clineup/releases/download/<clineup-version>/clineup-<clineup-version>-linux-x86_64.tar.gz | tar -xz -C <where-you-want-to-install-it>
Don't forget to add
docker run -v <ABSOLUTE-PATH-OF-YOUR-SOURCE-FOLDER>:/source -v <ABSOLUTE-PATH-OF-YOUR-DESTINATION-FOLDER>:/destination antscloud/clineup --source /source --destination /destination [YOUR-OPTIONS-HERE]
Clineup
Utility tool for organizing media
USAGE:
clineup [FLAGS] [OPTIONS] --destination <DESTINATION> --source <SOURCE>
FLAGS:
--drop-duplicates
Drop duplicates depending on the strategy
- Copy : Do not copy the duplicates
- Symlink : Do not symlink the duplicates
- Move : Do not move the duplicates
--dry-run
Performs a dry run without actually moving or renaming any files
--dry-run-number-of-files
Specifies the number of files to be processed by the dry run
--folder-format
Specifies the folder format to create
--gps-optimization
Round the lat ang long to 1 decimal places. It becomes less accurate (about 1 kilometer) but can save a lot
of API calls.
-h, --help
Prints help information
--recursive
Performs the organization process recursively on subdirectories
-V, --version
Prints version information
-v
Sets the log level to increase verbosity
OPTIONS:
--destination <DESTINATION>
Specifies the destination directory where the organized photos will be stored
--exclude-extension <EXTENSION>
Excludes photos with the specified file extensions
--exclude-regex <EXCLUDE-REGEX>
The regex is matched against the full path of the file, including the parent folders.
For example, to exclude all files containing 'IMG', use the regex '.*IMG.*
--extension <EXTENSION>
Filters photos based on file extensions
--filename-format <filename-format>
Specifies the filename format to create
--include-regex <INCLUDE-REGEX>
The regex is matched against the full path of the file, including the parent folders.
For example, to include all files containing 'IMG', use the regex '.*IMG.*
--nominatim-email <nominatim-email>
Email to use for nominatim API. This is mandatory following the nominatim usage policy
--reverse-geocoding <reverse-geocoding>
Reverse geocoding provider to use [possible values: nominatim]
--size-greater <SIZE>
Filters photos greater than the specified size. Use 'KB', 'MB', 'GB', 'TB' or 'PB'
--size-lower <SIZE>
Filters photos lower than the specified size. Use 'KB', 'MB', 'GB', 'TB' or 'PB'
--source <SOURCE>
Specifies the source directory or file to be organized
--strategy <strategy>
Specifies the organization strategy [default: copy] [possible values: copy, symlink, move]
Tag | Meaning |
---|---|
%year | Year of the modification date |
%month | Month of the modification date |
%day | Day of the modification date |
%width | Width of the media |
%height | Height of the media |
%camera_model | Camera model |
%camera_brand | Camera brand |
%country | Country where the photo was taken |
%state | State where the photo was taken |
%county | county where the photo was taken |
%municipality | municipality where the photo was taken |
%city | city where the photo was taken |
%original_folder | Original folder where the media is |
%original_filename | Original filename of the media |
%ctimeyear | Year of the creation date of the media |
%ctimemonth | Month of the creation date of the media |
%ctimeday | Day of the creation date of the media |
%mtimeyear | Year of the modification date of the media |
%mtimemonth | Month of the modification date of the media |
%mtimeday | Day of the modification date of the media |
The syntax to respect is the following :
Direct Placeholder: You can use the % symbol followed by the tag name directly, like %year or %month.
Escaped Placeholder: If you want to escape the tag and prevent unintended interpretation, you can use curly braces {}. For example, {%year}_{%month} will be treated as separate placeholders %year and %month.
Fallback Placeholder: You can define fallback values for a placeholder using the pipe | symbol. If the primary tag fails to be found, the library will automatically try the next fallback tag, and so on. If all fallbacks fail, the library will use the specified fallback string. For example, {%year|%camera_brand|Unknown year} will try %year, then %camera_brand, and finally, if both fail, it will use the fallback "Unknown year".
{%year}/{%month|Custom month}/%camera_brand/{%city|Unknown city}
could be replaced these ways :
2023/08/SomeBrand/Paris
2023/08/SomeBrand/Unknown city
2023/08/Unknown camera brand/Unknown city
Unknown year/Custom month/Unknown camera brand/Unknown city