青蛙小白
博客 / 2025/07

Rclone v1.70 重磅更新:使用 `convmv` 和 `--name-transform` 在云端随心所欲地转换文件名

2025/07/09 · — 字 · 阅读约 — 分钟 ·
目录

对于经常和海量文件打交道的朋友来说,文件名管理一直是个不大不小却又令人头疼的问题。尤其是在不同操作系统、不同云存储之间同步文件时,文件名的大小写、特殊字符、编码等问题常常会带来麻烦。过去,我们可能需要将文件下载到本地,用脚本批量处理后,再重新上传——这无疑是低效且耗费资源的。

好消息是,Rclone 在 v1.70 版本中带来了两个强大的新功能:convmv 命令和 --name-transform 参数,彻底改变了这一现状。现在,可以在服务端直接、高效地对文件名进行各种转换操作。

convmv 命令:服务端批量重命名

convmv 是一个全新的独立命令,专门用于在云端(服务端)对文件和目录进行重命名。它支持转换文件名大小写、替换文件名中的特定字符,甚至可以处理更复杂的命名规范化任务。

convmv 解决了长期以来用户需要在本地完成重命名再上传的痛点。现在,可以直接在服务端高效地清理和规范化文件名。想象一下,无论是将历史遗留的上万个文件名统一转换为小写,还是将 Windows 下的非法字符(如 * ?)替换为合法字符,都只是一行命令的事。这有助于维护跨系统数据一致性和高效管理海量文件。

示例:

# 将远程 my-remote:my-path 中所有文件名和目录名转换为小写
rclone convmv my-remote:my-path --name-transform "all,lowercase"

# 将远程 my-remote:my-path 中所有文件名和目录名中的 " " (空格) 替换为 "_" (下划线)
rclone convmv my-remote:my-path --name-transform "all,replace= :_"

--name-transform 标志:动态文件名转换

如果说 convmv 是专门的重命名工具,那么 --name-transform 就是一个更为通用和灵活的“变形”工具。它是一个可以在任何文件操作命令(如 copy, sync, move)中使用的参数,允许在传输过程中动态地转换文件名。

--name-transform 的强大之处在于它的“动态”特性。文件在复制或同步的瞬间,其名称就可以按照规则进行转换,而无需事先进行一次独立的重命名操作。这使得它在数据迁移和备份场景中非常有用。

示例:

# 在从本地复制文件到远程时,将所有文件名中的空格替换为下划线
rclone copy /local/path my-remote:my-path --name-transform "replace= :_"

# 在同步时,给所有文件名添加 "backup-" 前缀
rclone sync my-remote:source my-remote:destination --name-transform "prefix=backup-"

# 一个更复杂的例子:在上传时,将文件名转为小写,并去掉 .jpeg 后缀
rclone copy /local/images my-remote:images --name-transform "lowercase" --name-transform "trimsuffix=.jpeg"

--name-transform 支持的转换选项

CommandDescription
--name-transform prefix=XXXX在文件名前添加前缀 XXXX。
--name-transform suffix=XXXX在文件名(扩展名之后)添加后缀 XXXX。
--name-transform suffix_keep_extension=XXXX在文件名(保留原始扩展名)后添加后缀 XXXX。
--name-transform trimprefix=XXXX如果文件名前缀是 XXXX,则移除它。
--name-transform trimsuffix=XXXX如果文件名后缀是 XXXX,则移除它。
--name-transform regex=/pattern/replacement/应用基于正则表达式的转换。
--name-transform replace=old:new将文件名中的 old 替换为 new。
--name-transform date={YYYYMMDD}添加或前缀指定的日期格式。
--name-transform truncate=N将文件名截断至最多 N 个字符。
--name-transform base64encode将文件名进行 Base64 编码。
--name-transform base64decode解码 Base64 编码的文件名。
--name-transform encoder=ENCODING将文件名转换为指定的编码(例如,ISO-8859-1, Windows-1252, Macintosh)。
--name-transform decoder=ENCODING从指定的编码解码文件名。
--name-transform charmap=MAP应用字符映射转换。
--name-transform lowercase将文件名转换为小写。
--name-transform uppercase将文件名转换为大写。
--name-transform titlecase将文件名转换为标题格式。
--name-transform ascii移除文件名中的非 ASCII 字符。
--name-transform url对文件名进行 URL 编码。
--name-transform nfc将文件名转换为 NFC Unicode 范式。
--name-transform nfd将文件名转换为 NFD Unicode 范式。
--name-transform nfkc将文件名转换为 NFKC Unicode 范式。
--name-transform nfkd将文件名转换为 NFKD Unicode 范式。
--name-transform command=/path/to/my/program执行外部程序来转换文件名。

参考

评论