RnR是一个命令行工具,可以安全地重命名多个支持正则表达式的文件和目录。
您可以从最新版本页面下载二进制文件,选择与您的平台对应的压缩文件。这些压缩文件包含可执行文件和其他附加内容,例如完成文件( Bash 、 Zsh 、 fish和PowerShell )。
AUR ( rnr
) 中提供了一个软件包,用于在 Arch Linux 上安装最新版本的RnR 。
您可以使用 Homebrew 包管理器在 macOS 或 Linux 系统中安装此工具。
brew install rnr
RnR是用 Rust 编写的。您可以使用 Cargo 从源代码构建它。
git clone https://github.com/ismaelgv/rnr .
cargo install
cargo install rnr
USAGE:
rnr [FLAGS] [OPTIONS] <EXPRESSION> <REPLACEMENT> <PATH(S)>...
rnr [FLAGS] [OPTIONS] <SUBCOMMAND>
FLAGS:
-b, --backup Generate file backups before renaming
-n, --dry-run Only show what would be done (default mode)
--dump Force dumping operations into a file even in dry-run mode
-f, --force Make actual changes to files
-h, --help Prints help information
-x, --hidden Include hidden files and directories
-D, --include-dirs Rename matching directories
--no-dump Do not dump operations into a file
-r, --recursive Recursive mode
-s, --silent Do not print any information
-V, --version Prints version information
OPTIONS:
--color <color> Set color output mode [default: auto] [possible values: always, auto, never]
-d, --max-depth <LEVEL> Set max depth in recursive mode
-l, --replace-limit <LIMIT> Limit of replacements, all matches if set to 0 [default: 1]
ARGS:
<EXPRESSION> Expression to match (can be a regex)
<REPLACEMENT> Expression replacement
<PATH(S)>... Target paths
SUBCOMMANDS:
from-file Read operations from a dump file
help Prints this message or the help of the given subcommand(s)
to-ascii Replace all file name chars with ASCII chars. This operation is extremely lossy.
regex
板条箱相同的限制。您可以在此处检查正则表达式语法。它支持编号和命名的捕获组。from-file
子命令撤消这些操作。WINDOWS 注意:在使用*
的示例中,您需要在 PowerShell 中扩展通配符,例如: rnr ab (Get-Item ./*)
。 cmd.exe
不支持此功能。
您可以传递要重命名的文件列表作为参数:
rnr -f file renamed ./file-01.txt ./one/file-02.txt ./one/file-03.txt
原树
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
└── file-03.txt
重命名树
.
├── renamed-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── renamed-02.txt
└── renamed-03.txt
默认情况下会忽略目录,但您也可以使用选项-D
将它们包含在内以进行重命名。
rnr -f -D foo bar ./ *
原树
.
├── foo
│ └── foo.txt
└── foo.txt
重命名树
.
├── bar
│ └── foo.txt
└── bar.txt
默认情况下,替换限制设置为 1,但您可以配置此限制以替换多个不重叠的匹配项。如果此选项设置为 0,则所有匹配项都将被替换。
rnr -f -l 0 o u ./ *
原树
.
├── foo.txt
├── foofoo.txt
├── foofoofoo.txt
└── foofoofoofoo.txt
重命名树
.
├── fuu.txt
├── fuufuu.txt
├── fuufuufuu.txt
└── fuufuufuufuu.txt
您可以使用管道传递参数,将rnr
与其他 UNIX 工具结合起来。
find . -type f +mtime 1 | xargs rnr -f file renamed
cat file_list.txt | xargs rnr -f file rename
file_list.txt
内容:
file-01.txt
one/file-02.txt
one/file-03.txt
如果传递了递归( -r
)选项, rnr
将递归地查找路径中的所有文件,没有深度限制。
rnr -f -r file renamed ./
原树
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── two
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── three
├── file-01.txt
├── file-02.txt
└── file-03.txt
重命名树
.
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── one
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── two
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── three
├── renamed-01.txt
├── renamed-02.txt
└── renamed-03.txt
同样,您可以结合递归操作来设置最大目录深度。
rnr -f -r -d 2 file renamed ./
原树
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── two
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── three
├── file-01.txt
├── file-02.txt
└── file-03.txt
重命名树
.
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── one
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── two
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── three
├── file-01.txt
├── file-02.txt
└── file-03.txt
rnr
情况下忽略隐藏文件以加快操作速度并避免某些特定目录(如.git/
或.local/
出现问题。您可以通过-x
选项包含隐藏文件。另外,您也可以将包含目录-D
选项与-r
一起使用。
rnr -f -r -D -x foo bar ./
原树
.
├── .foo_hidden_file.txt
├── foo.txt
├── foo
│ ├── foo.txt
│ └── foo
│ └── foo.txt
└── .foo_hidden_dir
└── foo.txt
重命名树
.
├── .bar_hidden_file.txt
├── bar.txt
├── bar
│ ├── bar.txt
│ └── bar
│ └── bar.txt
└── .bar_hidden_dir
└── bar.txt
当您执行重命名操作时, rnr
将默认在您执行命令的当前目录中创建一个转储文件。该文件可用于使用from-file
和-u
选项轻松恢复操作。
重命名操作
rnr -f foo bar ./ *
撤消之前的操作
rnr from-file -f -u rnr-[timestamp].json
如果您想重做操作,只需传递转储文件,无需任何其他参数:
rnr from-file -f rnr-[timestamp].json
rnr
可以在重命名任何传递-b
选项的操作之前创建备份文件。确保备份文件名是唯一的,并且在创建另一个备份时不会被覆盖。如果您正在处理许多大文件,请考虑到文件将会重复。
rnr -f -b file renamed ./ *
原树
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
重命名树
.
├── file-01.txt.bk
├── file-02.txt.bk
├── file-03.txt.bk
├── renamed-01.txt
├── renamed-02.txt
└── renamed-03.txt
rnr
可以将 UTF-8 文件名转换为其 ASCII 表示形式。此功能使用 AnyAscii 库来执行音译。
你可以运行:
rnr to-ascii ./ *
或者:
rnr to-ascii -r .
原树
.
├── fïlé-01.txt
├── FïĹÊ-02.txt
└── file-03.txt
重命名树
.
├── file-01.txt
├── FILE-02.txt
└── file-03.txt
有关regex
包中使用的 regex 的更多信息。
rnr -f '..*$' '.txt' ./*
原树
.
├── file-01.ext1
├── file-02.ext2
└── file-03.ext3
重命名树
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
rnr -f 'd' '1' ./*
原树
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
重命名树
.
├── file-11.txt
├── file-12.txt
└── file-13.txt
name(1)-number(2).extension(3)
]。rnr -f ' (w+)-(d+).(w+) ' ' ${2}-${1}.${3} ' ./ *
原树
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
重命名树
.
├── 01-file.txt
├── 02-file.txt
└── 03-file.txt
SHELL 注意:在 Bash 和 zsh 等 shell 中,请确保将REPLACEMENT
模式用单引号引起来。否则,捕获组索引将被扩展的 shell 变量替换。
number
。ext
。rnr -f ' (?P<number>d{2}).(?P<ext>w{3}) ' ' ${ext}.${number} ' ./ *
原树
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
重命名树
.
├── file-txt.01
├── file-txt.02
└── file-txt.03