一个比子串替换做得更多的重命名实现。
项目描述
tl.rename概述
tl.rename提供了一个类似POSIX操作系统中包含的rename程序的实现。虽然这些工具通常只进行子串或正则表达式替换,但tl.rename计划中的文件名转换包括
类似于Gentoo的rename实现中的子串替换,例如
类似于Debian的rename实现中的正则表达式替换
从文件或标准输入读取新名称
各种大小写转换
插入格式化计数的附加正则表达式替换
如果可用,使用readline进行交互式重命名
使用外部文本编辑器进行交互式重命名
版本0.1实现了从文件或标准输入读取名称、大小写转换、简单的子串替换和交互式使用readline进行重命名。
tl.rename包可以作为库使用,但同时也安装了一个可执行脚本,用于测试其功能。
用法
rename [选项] [文件路径]
文件路径可以包含目录路径,可以是相对于当前工作目录的绝对路径或相对路径。当调用rename时,指定的文件不需要存在,但如果在执行实际重命名时不存在,将导致它失败。
选项
- -h, --help
显示此帮助消息并退出
- -d, --debug
调试模式,不捕获Python异常
- -D,--dry-run
dry-run 模式,不操作文件系统
- -s SLICE,--slice=SLICE
仅转换每个名称的切片,值是 LOWER:UPPER,两个边界都是可选的
- -n NAMES_FILE,--names-file=NAMES_FILE
从文件中读取新名称,其中 - 表示标准输入
- -c CASE,--case=CASE
大小写转换名称,可能的值是 upper、lower、sentence
- -r FROM_TO,--replace=FROM_TO
FROM_TO 是两个不同的参数(-r FROM TO);全局替换第一个选项参数为第二个,可以多次提供
- -i,--interactive
交互式编辑名称(如果没有明确指定转换,则默认为此选项)
工作原理
tl.rename 对作为命令参数提供的文件名序列执行一个或多个字符串转换,然后相应地重命名文件。
转换文件名
要应用哪些转换由命令行选项确定。如果选择了多个转换,它们将按以下顺序执行
- 从文件读取名称(--names-file)
从文件或标准输入读取新文件名,每行一个名称。
- 大小写转换(--case)
- 对文件名执行大小写转换
将名称转换为大写(upper)。
将名称转换为小写(lower)。
应用混合大小写样式,基本上是大写短语的第一词(sentence)。有关句子大小写的完整规则,请参阅 doctest 示例。
- 替换子字符串(--replace)
替换文件名中的子字符串,其中匹配模式和替换作为两个参数直接给出。可以一次性进行任意数量的替换。
- 交互式替换(--interactive)
如果可用,使用 readline 库依次让用户编辑每个文件名。这提供了舒适的行编辑,包括历史记录。
文件名列表必须满足以下条件
每个旧名称和新名称均非空,且不包含空字符。
每个转换过程中名称的数量保持不变。
名称在每次转换前后都必须是唯一的。尾部路径分隔符不会产生影响。
重命名文件
一旦对文件名执行了所有转换,实际更改名称的项目将在文件系统中重命名(除非激活 dry-run 模式)。重命名受以下规则约束
要重命名的文件和目录必须在此处存在。
如果文件名包含子目录路径元素,并且其中一个已更改,则项目将移动到新目录。
在目录之间移动项目时,需要创建目录层次结构,并删除空目录。空目录本身可以移动。
将文件重命名为另一个现有文件名将覆盖该文件。
将目录重命名为一个现有空目录名将覆盖该目录。
目录不能重命名为现有已填充目录或非目录,同样,非目录也不能重命名为现有目录。
将项目重命名为在同一运行中重命名的另一个项目名称不会覆盖该项目。特别是,可以立即交换两个项目的名称。
永远不会跟随符号链接。
切片
可以将变换限制在每个文件名指定的部分。例如,当前缀不应算作句子的开始时,应用句首大写格式于带前缀的文件名时,这非常有用。
将变换应用于每个文件名的哪一部分(或切片)由作为 --slice 选项值的指定决定。此值的语法类似于 Python 的简单切片:由冒号分隔的两个整数。这些数字表示切片的起始和停止索引,计数从 0 开始。停止索引是切片后的第一个字符的索引。起始和停止索引均可省略(但冒号不可省略);它们分别默认为名称的开始和结束(0 和一个非常大的数字)。负索引表示从名称的末尾开始计数。
让我们举一些例子,应用于文件名“05 - An interesting song.ogg”(28 个字符)
指定 |
切片 |
---|---|
: |
05 - An interesting song.ogg |
5:100 |
An interesting song.ogg |
:-4 |
05 - An interesting song |
5:-4 |
An interesting song |
5:24 |
An interesting song |
关于 tl.rename
- 作者:
Thomas Lotze (thomas@thomas-lotze.de, http://thomas-lotze.de/)
- 在线文档:
- PyPI 页面:
- 问题追踪器:
- 源代码:
- 当前变更日志: