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