#重命名 #命令行工具 #工具 #位置参数

应用 pipe-rename

使用您喜欢的文本编辑器重命名文件

19个稳定版本

1.6.5 2023年6月28日
1.6.2 2023年4月4日
1.6.1 2022年11月6日
1.5.0 2022年7月10日
1.1.4 2020年9月14日

#31 in 文本编辑器

每月 46 次下载

MIT 许可证

110KB
495

pipe-rename

Crates.io

pipe-rename 接收文件列表作为输入,打开您选择的 $EDITOR,然后相应地重命名这些文件。

安装

cargo安装 pipe-rename

这将安装 renamer 二进制文件。

用法

用法简单,只需将文件列表通过管道传递给 renamer。这将在您的 $EDITOR 中打开(如果未设置或通过 --editor 传递),一旦您的编辑器退出,它将检测哪些文件被重命名

ls | renamer

您还可以提供文件名作为位置参数。要将当前目录中的 .txt 文件重命名

renamer *.txt

默认行为是重命名文件,但您可以覆盖此行为。如果您想在每次重命名时运行 git mv old new,可以这样做

ls | renamer --rename-command "git mv"

帮助文本

Takes a list of files and renames/moves them by piping them through an external editor

USAGE:
    renamer [OPTIONS] [FILES]...

ARGS:
    <FILES>...


OPTIONS:
    -c, --rename-command <COMMAND>
            Optionally set a custom rename command, like 'git mv'

    -e, --editor <EDITOR>
            Optionally set an editor, overriding EDITOR environment variable and default

    -f, --force
            Overwrite existing files

    -h, --help
            Print help information

    -n, --filenames-only
            Only rename filenames

    -p, --pretty-diff
            Prettify diffs

    -u, --undo
            Undo the previous renaming operation

    -V, --version
            Print version information

    -y, --yes
            Answer all prompts with yes

注意

注意:根据使用的 ls 风味(或替代品,如 lsdexa ...),了解此上下文中 ls 可能引起的问题是有意义的。请阅读此文档 获取更多信息。

尽管您的shell会单独传递文件名,无论它们是否包含空格,但无法检测管道并按行打印一个文件名的 ls 会造成问题。不幸的是,ls -Q 也不是解决方案,因为与shell不同(shell会在传递给调用命令之前删除引号)renamer 不会处理引号名称,并可能对不存在文件进行抱怨。

高级用法

如果您可以访问类似GNU find 的工具,您还可以使用以下方法

find -type f -exec renamer {} +

这将执行 renamer,并对 find 匹配的所有文件进行处理。您可以使用额外的 find 表达式,如 -name-ipath 来限制要重命名的文件。然而,有一个注意事项:在大量文件列表中,您可能会遇到多次调用 renamer(以及您的编辑器)的情况,这是由于 find ... -exec {} + 的工作方式。它会在命令行中传递尽可能多的文件名,但受限于 ARG_MAX(参见 getconf ARG_MAX 输出,了解您系统上整体命令行长度的限制)。

其他 find 变体将允许以下操作,但会为每个找到的文件调用一次 renamer(以及您的编辑器)

find -type f -exec renamer {} \;

为了解决这个问题,您可以使用 xargsfind 一起使用,如下所示(对于 find 假设了 -print

find -type f | xargs renamer --editor vim

xargs 之后的部分是调用 renamer 而不带文件名。这只是为了展示如何使用此方法将参数传递给 renamer

如果您的文件包含奇怪的字符,您也可以尝试

find -type f -print0 | xargs -0 renamer --editor vim

唉,这可能会带来麻烦。例如,如果您的文件名包含换行符,这可能会使 renamer 产生混淆,因为它在重新读取编辑后的文件时期望每行只有一个文件名。

贡献者 ✨


Marcus Buffett

🤔 💻

Robin Krahl

🤔 💻 🐛

Max Timkovich

🤔 💻

Benoit de Chezelles

🤔

Oliver Schneider

🤔 💻

本项目遵循 all-contributors 规范。欢迎任何类型的贡献!

依赖项

~5–15MB
~180K SLoC