--- title: "rclone convmv" description: "Convert file and directory names in place." versionIntroduced: v1.70 # autogenerated - DO NOT EDIT, instead edit the source code in cmd/convmv/ and as part of making a release run "make commanddocs" --- # rclone convmv Convert file and directory names in place. ## Synopsis convmv supports advanced path name transformations for converting and renaming files and directories by applying prefixes, suffixes, and other alterations. | Command | Description | |------|------| | `--name-transform prefix=XXXX` | Prepends XXXX to the file name. | | `--name-transform suffix=XXXX` | Appends XXXX to the file name after the extension. | | `--name-transform suffix_keep_extension=XXXX` | Appends XXXX to the file name while preserving the original file extension. | | `--name-transform trimprefix=XXXX` | Removes XXXX if it appears at the start of the file name. | | `--name-transform trimsuffix=XXXX` | Removes XXXX if it appears at the end of the file name. | | `--name-transform regex=/pattern/replacement/` | Applies a regex-based transformation. | | `--name-transform replace=old:new` | Replaces occurrences of old with new in the file name. | | `--name-transform date={YYYYMMDD}` | Appends or prefixes the specified date format. | | `--name-transform truncate=N` | Truncates the file name to a maximum of N characters. | | `--name-transform base64encode` | Encodes the file name in Base64. | | `--name-transform base64decode` | Decodes a Base64-encoded file name. | | `--name-transform encoder=ENCODING` | Converts the file name to the specified encoding (e.g., ISO-8859-1, Windows-1252, Macintosh). | | `--name-transform decoder=ENCODING` | Decodes the file name from the specified encoding. | | `--name-transform charmap=MAP` | Applies a character mapping transformation. | | `--name-transform lowercase` | Converts the file name to lowercase. | | `--name-transform uppercase` | Converts the file name to UPPERCASE. | | `--name-transform titlecase` | Converts the file name to Title Case. | | `--name-transform ascii` | Strips non-ASCII characters. | | `--name-transform url` | URL-encodes the file name. | | `--name-transform nfc` | Converts the file name to NFC Unicode normalization form. | | `--name-transform nfd` | Converts the file name to NFD Unicode normalization form. | | `--name-transform nfkc` | Converts the file name to NFKC Unicode normalization form. | | `--name-transform nfkd` | Converts the file name to NFKD Unicode normalization form. | | `--name-transform command=/path/to/my/programfile names.` | Executes an external program to transform | Conversion modes: ``` none nfc nfd nfkc nfkd replace prefix suffix suffix_keep_extension trimprefix trimsuffix index date truncate base64encode base64decode encoder decoder ISO-8859-1 Windows-1252 Macintosh charmap lowercase uppercase titlecase ascii url regex command ``` Char maps: ``` IBM-Code-Page-037 IBM-Code-Page-437 IBM-Code-Page-850 IBM-Code-Page-852 IBM-Code-Page-855 Windows-Code-Page-858 IBM-Code-Page-860 IBM-Code-Page-862 IBM-Code-Page-863 IBM-Code-Page-865 IBM-Code-Page-866 IBM-Code-Page-1047 IBM-Code-Page-1140 ISO-8859-1 ISO-8859-2 ISO-8859-3 ISO-8859-4 ISO-8859-5 ISO-8859-6 ISO-8859-7 ISO-8859-8 ISO-8859-9 ISO-8859-10 ISO-8859-13 ISO-8859-14 ISO-8859-15 ISO-8859-16 KOI8-R KOI8-U Macintosh Macintosh-Cyrillic Windows-874 Windows-1250 Windows-1251 Windows-1252 Windows-1253 Windows-1254 Windows-1255 Windows-1256 Windows-1257 Windows-1258 X-User-Defined ``` Encoding masks: ``` Asterisk BackQuote BackSlash Colon CrLf Ctl Del Dollar Dot DoubleQuote Exclamation Hash InvalidUtf8 LeftCrLfHtVt LeftPeriod LeftSpace LeftTilde LtGt None Percent Pipe Question Raw RightCrLfHtVt RightPeriod RightSpace Semicolon SingleQuote Slash SquareBracket ``` Examples: ``` rclone convmv "stories/The Quick Brown Fox!.txt" --name-transform "all,uppercase" // Output: STORIES/THE QUICK BROWN FOX!.TXT ``` ``` rclone convmv "stories/The Quick Brown Fox!.txt" --name-transform "all,replace=Fox:Turtle" --name-transform "all,replace=Quick:Slow" // Output: stories/The Slow Brown Turtle!.txt ``` ``` rclone convmv "stories/The Quick Brown Fox!.txt" --name-transform "all,base64encode" // Output: c3Rvcmllcw==/VGhlIFF1aWNrIEJyb3duIEZveCEudHh0 ``` ``` rclone convmv "c3Rvcmllcw==/VGhlIFF1aWNrIEJyb3duIEZveCEudHh0" --name-transform "all,base64decode" // Output: stories/The Quick Brown Fox!.txt ``` ``` rclone convmv "stories/The Quick Brown 🦊 Fox Went to the Café!.txt" --name-transform "all,nfc" // Output: stories/The Quick Brown 🦊 Fox Went to the Café!.txt ``` ``` rclone convmv "stories/The Quick Brown 🦊 Fox Went to the Café!.txt" --name-transform "all,nfd" // Output: stories/The Quick Brown 🦊 Fox Went to the Café!.txt ``` ``` rclone convmv "stories/The Quick Brown 🦊 Fox!.txt" --name-transform "all,ascii" // Output: stories/The Quick Brown Fox!.txt ``` ``` rclone convmv "stories/The Quick Brown Fox!.txt" --name-transform "all,trimsuffix=.txt" // Output: stories/The Quick Brown Fox! ``` ``` rclone convmv "stories/The Quick Brown Fox!.txt" --name-transform "all,prefix=OLD_" // Output: OLD_stories/OLD_The Quick Brown Fox!.txt ``` ``` rclone convmv "stories/The Quick Brown 🦊 Fox Went to the Café!.txt" --name-transform "all,charmap=ISO-8859-7" // Output: stories/The Quick Brown _ Fox Went to the Caf_!.txt ``` ``` rclone convmv "stories/The Quick Brown Fox: A Memoir [draft].txt" --name-transform "all,encoder=Colon,SquareBracket" // Output: stories/The Quick Brown Fox: A Memoir [draft].txt ``` ``` rclone convmv "stories/The Quick Brown 🦊 Fox Went to the Café!.txt" --name-transform "all,truncate=21" // Output: stories/The Quick Brown 🦊 Fox ``` ``` rclone convmv "stories/The Quick Brown Fox!.txt" --name-transform "all,command=echo" // Output: stories/The Quick Brown Fox!.txt ``` ``` rclone convmv "stories/The Quick Brown Fox!" --name-transform "date=-{YYYYMMDD}" // Output: stories/The Quick Brown Fox!-20250617 ``` ``` rclone convmv "stories/The Quick Brown Fox!" --name-transform "date=-{macfriendlytime}" // Output: stories/The Quick Brown Fox!-2025-06-17 0551PM ``` ``` rclone convmv "stories/The Quick Brown Fox!.txt" --name-transform "all,regex=[\\.\\w]/ab" // Output: ababababababab/ababab ababababab ababababab ababab!abababab ``` Multiple transformations can be used in sequence, applied in the order they are specified on the command line. The `--name-transform` flag is also available in `sync`, `copy`, and `move`. # Files vs Directories ## By default `--name-transform` will only apply to file names. The means only the leaf file name will be transformed. However some of the transforms would be better applied to the whole path or just directories. To choose which which part of the file path is affected some tags can be added to the `--name-transform` | Tag | Effect | |------|------| | `file` | Only transform the leaf name of files (DEFAULT) | | `dir` | Only transform name of directories - these may appear anywhere in the path | | `all` | Transform the entire path for files and directories | This is used by adding the tag into the transform name like this: `--name-transform file,prefix=ABC` or `--name-transform dir,prefix=DEF`. For some conversions using all is more likely to be useful, for example `--name-transform all,nfc` Note that `--name-transform` may not add path separators `/` to the name. This will cause an error. # Ordering and Conflicts ## * Transformations will be applied in the order specified by the user. * If the `file` tag is in use (the default) then only the leaf name of files will be transformed. * If the `dir` tag is in use then directories anywhere in the path will be transformed * If the `all` tag is in use then directories and files anywhere in the path will be transformed * Each transformation will be run one path segment at a time. * If a transformation adds a `/` or ends up with an empty path segment then that will be an error. * It is up to the user to put the transformations in a sensible order. * Conflicting transformations, such as `prefix` followed by `trimprefix` or `nfc` followed by `nfd`, are possible. * Instead of enforcing mutual exclusivity, transformations are applied in sequence as specified by the user, allowing for intentional use cases (e.g., trimming one prefix before adding another). * Users should be aware that certain combinations may lead to unexpected results and should verify transformations using `--dry-run` before execution. # Race Conditions and Non-Deterministic Behavior ## Some transformations, such as `replace=old:new`, may introduce conflicts where multiple source files map to the same destination name. This can lead to race conditions when performing concurrent transfers. It is up to the user to anticipate these. * If two files from the source are transformed into the same name at the destination, the final state may be non-deterministic. * Running rclone check after a sync using such transformations may erroneously report missing or differing files due to overwritten results. * To minimize risks, users should: * Carefully review transformations that may introduce conflicts. * Use `--dry-run` to inspect changes before executing a sync (but keep in mind that it won't show the effect of non-deterministic transformations). * Avoid transformations that cause multiple distinct source files to map to the same destination name. * Consider disabling concurrency with `--transfers=1` if necessary. * Certain transformations (e.g. `prefix`) will have a multiplying effect every time they are used. Avoid these when using `bisync`. ``` rclone convmv dest:path --name-transform XXX [flags] ``` ## Options ``` --create-empty-src-dirs Create empty source dirs on destination after move --delete-empty-src-dirs Delete empty source dirs after move -h, --help help for convmv ``` Options shared with other commands are described next. See the [global flags page](/flags/) for global options not listed here. ### Copy Options Flags for anything which can copy a file ``` --check-first Do all the checks before starting transfers -c, --checksum Check for changes with size & checksum (if available, or fallback to size only) --compare-dest stringArray Include additional server-side paths during comparison --copy-dest stringArray Implies --compare-dest but also copies files from paths into destination --cutoff-mode HARD|SOFT|CAUTIOUS Mode to stop transfers when reaching the max transfer limit HARD|SOFT|CAUTIOUS (default HARD) --ignore-case-sync Ignore case when synchronizing --ignore-checksum Skip post copy check of checksums --ignore-existing Skip all files that exist on destination --ignore-size Ignore size when skipping use modtime or checksum -I, --ignore-times Don't skip items that match size and time - transfer all unconditionally --immutable Do not modify files, fail if existing files have been modified --inplace Download directly to destination file instead of atomic download to temp/rename -l, --links Translate symlinks to/from regular files with a '.rclonelink' extension --max-backlog int Maximum number of objects in sync or check backlog (default 10000) --max-duration Duration Maximum duration rclone will transfer data for (default 0s) --max-transfer SizeSuffix Maximum size of data to transfer (default off) -M, --metadata If set, preserve metadata when copying objects --modify-window Duration Max time diff to be considered the same (default 1ns) --multi-thread-chunk-size SizeSuffix Chunk size for multi-thread downloads / uploads, if not set by filesystem (default 64Mi) --multi-thread-cutoff SizeSuffix Use multi-thread downloads for files above this size (default 256Mi) --multi-thread-streams int Number of streams to use for multi-thread downloads (default 4) --multi-thread-write-buffer-size SizeSuffix In memory buffer size for writing when in multi-thread mode (default 128Ki) --name-transform stringArray Transform paths during the copy process --no-check-dest Don't check the destination, copy regardless --no-traverse Don't traverse destination file system on copy --no-update-dir-modtime Don't update directory modification times --no-update-modtime Don't update destination modtime if files identical --order-by string Instructions on how to order the transfers, e.g. 'size,descending' --partial-suffix string Add partial-suffix to temporary file name when --inplace is not used (default ".partial") --refresh-times Refresh the modtime of remote files --server-side-across-configs Allow server-side operations (e.g. copy) to work across different configs --size-only Skip based on size only, not modtime or checksum --streaming-upload-cutoff SizeSuffix Cutoff for switching to chunked upload if file size is unknown, upload starts after reaching cutoff or when file ends (default 100Ki) -u, --update Skip files that are newer on the destination ``` ### Important Options Important flags useful for most commands ``` -n, --dry-run Do a trial run with no permanent changes -i, --interactive Enable interactive mode -v, --verbose count Print lots more stuff (repeat for more) ``` ### Filter Options Flags for filtering directory listings ``` --delete-excluded Delete files on dest excluded from sync --exclude stringArray Exclude files matching pattern --exclude-from stringArray Read file exclude patterns from file (use - to read from stdin) --exclude-if-present stringArray Exclude directories if filename is present --files-from stringArray Read list of source-file names from file (use - to read from stdin) --files-from-raw stringArray Read list of source-file names from file without any processing of lines (use - to read from stdin) -f, --filter stringArray Add a file filtering rule --filter-from stringArray Read file filtering patterns from a file (use - to read from stdin) --hash-filter string Partition filenames by hash k/n or randomly @/n --ignore-case Ignore case in filters (case insensitive) --include stringArray Include files matching pattern --include-from stringArray Read file include patterns from file (use - to read from stdin) --max-age Duration Only transfer files younger than this in s or suffix ms|s|m|h|d|w|M|y (default off) --max-depth int If set limits the recursion depth to this (default -1) --max-size SizeSuffix Only transfer files smaller than this in KiB or suffix B|K|M|G|T|P (default off) --metadata-exclude stringArray Exclude metadatas matching pattern --metadata-exclude-from stringArray Read metadata exclude patterns from file (use - to read from stdin) --metadata-filter stringArray Add a metadata filtering rule --metadata-filter-from stringArray Read metadata filtering patterns from a file (use - to read from stdin) --metadata-include stringArray Include metadatas matching pattern --metadata-include-from stringArray Read metadata include patterns from file (use - to read from stdin) --min-age Duration Only transfer files older than this in s or suffix ms|s|m|h|d|w|M|y (default off) --min-size SizeSuffix Only transfer files bigger than this in KiB or suffix B|K|M|G|T|P (default off) ``` ### Listing Options Flags for listing directories ``` --default-time Time Time to show if modtime is unknown for files and directories (default 2000-01-01T00:00:00Z) --fast-list Use recursive list if available; uses more memory but fewer transactions ``` ## See Also * [rclone](/commands/rclone/) - Show help for rclone commands, flags and backends.