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 次下载
110KB
495 行
pipe-rename
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
风味(或替代品,如 lsd
,exa
...),了解此上下文中 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 {} \;
为了解决这个问题,您可以使用 xargs
与 find
一起使用,如下所示(对于 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