我有一个文件夹,其中包含一系列名为:的文件
prefix_1234_567.png
prefix_abcd_efg.png
我想批量删除一个下划线和中间内容,因此输出为:
prefix_567.png
prefix_efg.png
相关但不完全解释:
在您的特定情况下,您可以使用以下bash
命令(bash
是macOS上的默认Shell):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
注意:如果您的文件名有可能以-
开头,请将--
放在文件名[1]之前:mv -- "$f" "${f/_*_/_}"
注意:echo
放在mv
之前,以进行空运行。删除它以执行实际的重命名。
您可以从命令行运行它,也可以在脚本中使用它。
"${f/_*_/_}"
是bash
parameter expansion的应用:(第一个)子字符串匹配模式_*_
被文字_
代替,有效地从名称中切除了中间标记。_*_
是pattern(通配符表达式,也用于通配符),而不是regular expression(要了解模式,请运行man bash
并搜索Pattern Matching
)。如果您经常发现自己为批量重新命名文件,请考虑安装专用工具,例如基于Perl的rename
utility。在macOS上,您可以使用流行的软件包管理器rename
进行安装,如下所示:
Homebrew
与使用brew install rename
的顶部命令等效:
rename
同样,此命令执行空运行;删除rename -n -e 's/_.*_/_/' *.png
以执行实际的重命名。
-n
解决方案,bash
执行文本替换,但是-与s/.../.../
不同,-使用true 正则表达式。[1]特殊参数bash
的目的(由大多数实用程序支持)是表示应将后续参数视为operands(值),即使它们是look类似于options,因为它以--
开头,如-
注释。
要重命名文件,可以使用Jacob C.实用程序:
rename
例如,要更改当前目录中所有文件名中的搜索字符串:
brew install rename
删除'n'参数以应用更改。
更多信息:rename -nvs searchword replaceword *
您可以使用sed:
man rename
结果:
ls * | sed -e 'p;s@_.*_@_@g' | xargs -n2 mv
*首先进行空运行,最后将prefix_567.png prefix_efg.png
替换为mv
说明:
我有一批看起来像这样的文件:be90-01.png,需要将破折号更改为下划线。我用了,效果很好:
echo
您可以使用for f in *; do mv "$f" "`echo $f | tr '-' '_'`"; done
安装rename
命令。只需执行brew
并使用它即可。
使用brew install rename
mmv
尝试一下
mmv '*_*_*' '#1_#3' *.png
这里是另一种方式:
for i in *.png ; do mv "$i" "${i/remove_me*.png/.png}" ; done