我有一个包含一系列文件的文件夹,名为:
prefix_1234_567.png
prefix_abcd_efg.png
我想批量删除一个下划线和中间内容,因此输出将是:
prefix_567.png
prefix_efg.png
相关但不完全解释:
- 如何使用终端批量重命名文件?
- 正则表达式在 OS X 终端中批量重命名文件
根据您的具体情况,您可以使用以下内容bash
命令 (bash
是 macOS 上的默认 shell):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
Note: If there's a chance that your filenames start with -
, place --
before them[1]:
mv -- "$f" "${f/_*_/_}"
Note: echo
前置于mv
以便进行空运行。删除它以执行实际的重命名。
您可以从命令行运行它或在脚本中使用它。
-
"${f/_*_/_}"
是一个应用程序bash
参数扩展:(第一个)子字符串匹配模式_*_
被替换为文字_
,有效地从名称中删除中间标记。
- 注意
_*_
is a pattern(通配符表达式,也用于通配符),而不是正则表达式(要了解模式,请运行man bash
并搜索Pattern Matching
).
如果您发现自己经常批量重命名文件,考虑安装专门的工具,例如基于 Perl 的rename utility。
在 macOS 上,您可以使用流行的包管理器安装它Homebrew如下:
brew install rename
这与顶部的命令等效rename
:
rename -n -e 's/_.*_/_/' *.png
该命令再次执行试运行;消除-n
执行实际的重命名。
- 类似于
bash
解决方案,s/.../.../
执行文本替换,但是 - 与bash
- true 常用表达被使用。
[1] The purpose of special argument --
, which is supported by most utilities, is to signal that subsequent arguments should be treated as operands (values), even if they look like options due to starting with -
, as Jacob C. notes.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)