我有一个文件夹,里面有一系列文件,名为:
prefix_1234_567.png prefix_abcd_efg.png
我想 * 批量删除 * 一个下划线和中间的内容,所以输出将是:
prefix_567.png prefix_efg.png
相关但不完全解释:
cnh2zyt31#
在特定情况下,您可以使用以下bash命令(bash是macOS上的默认shell):
bash
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
注意:如果你的文件名有可能以-开头,请将--放在前面[1]:mv -- "$f" "${f/_*_/_}"
-
--
mv -- "$f" "${f/_*_/_}"
注意:echo被前置到mv,以便执行空运行。删除它以执行实际的重命名。
echo
mv
您可以从命令行运行它或在脚本中使用它。
"${f/_*_/_}"
_*_
_
man bash
Pattern Matching
如果你发现自己经常批量重命名文件,考虑安装一个专门的工具,如基于Perl的rename utility。在macOS上,您可以使用流行的包管理器Homebrew安装它,如下所示:
rename
brew install rename
下面是使用rename的顶部命令的等效命令:
rename -n -e 's/_.*_/_/' *.png
同样,此命令执行一次空运行;删除-n以执行实际的重命名。
-n
s/.../.../
[1]特殊参数--的目的是表示后续参数应被视为 * 操作数 *(值),即使它们 * 看起来 * 像 * 选项 *,因为它们以-开始,如Jacob C.所述。
1zmg4dgp2#
要重命名文件,可以使用rename实用程序:brew install rename例如,要更改当前目录中所有文件名中的搜索字符串:
rename -nvs searchword replaceword *
删除“n”参数以应用更改。更多信息:man rename
man rename
tag5nh1u3#
你可以使用sed:
ls * | sed -e 'p;s@_.*_@_@g' | xargs -n2 mv
结果:
说明:
pprl5pva4#
我有一批文件,看起来像这样:be90-01.png,需要将破折号改为下划线。我用了这个,效果很好:
for f in *; do mv "$f" "`echo $f | tr '-' '_'`"; done
2hh7jdfx5#
你可以使用brew安装rename命令。只需要执行brew install rename并使用它。
brew
oyxsuwqo6#
试试这个
for i in *.png ; do mv "$i" "${i/remove_me*.png/.png}" ; done
这里是另一种方法:
for file in Name*.png; do mv "$file" "01_$file"; done
0md85ypi7#
使用mmv
mmv
mmv '*_*_*' '#1_#3' *.png
vql8enpb8#
由于以编程方式重命名文件是有风险的(如果你错了,可能会有破坏性),我会使用一个专门为批量重命名而构建的具有干运行模式的工具,例如。renamer。此命令将对当前目录中的所有文件进行操作,请使用--dry-run,直到您确信输出看起来正确为止:
--dry-run
$ renamer --find "/(prefix_)(\w+_)(\w+)/" --replace "$1$3" -e name --dry-run * Dry run ✔︎ prefix_1234_567.png → prefix_567.png ✔︎ prefix_abcd_efg.png → prefix_efg.png Rename complete: 2 of 2 files renamed.
更多重命名器使用示例here。
93ze6v8z9#
zsh现在是macOS的默认shell,它有自己的批量重命名功能,zmv有时别名为mmv到noglob zmv -W。
zsh
zmv
noglob zmv -W
9条答案
按热度按时间cnh2zyt31#
在特定情况下,您可以使用以下
bash
命令(bash
是macOS上的默认shell):注意:如果你的文件名有可能以
-
开头,请将--
放在前面[1]:mv -- "$f" "${f/_*_/_}"
注意:
echo
被前置到mv
,以便执行空运行。删除它以执行实际的重命名。您可以从命令行运行它或在脚本中使用它。
"${f/_*_/_}"
是bash
parameter expansion的一个应用程序:匹配模式_*_
的(第一个)子串被替换为文字_
,有效地从名称中删除中间标记。_*_
是一个 pattern(一个正则表达式,也用于globbing),而不是一个 * 正则表达式 *(要了解模式,请运行man bash
并搜索Pattern Matching
)。如果你发现自己经常批量重命名文件,考虑安装一个专门的工具,如基于Perl的
rename
utility。在macOS上,您可以使用流行的包管理器Homebrew安装它,如下所示:下面是使用
rename
的顶部命令的等效命令:同样,此命令执行一次空运行;删除
-n
以执行实际的重命名。bash
解决方案类似,s/.../.../
执行文本替换,但与bash
不同的是,使用了true * 正则表达式 *。[1]特殊参数
--
的目的是表示后续参数应被视为 * 操作数 *(值),即使它们 * 看起来 * 像 * 选项 *,因为它们以-
开始,如Jacob C.所述。1zmg4dgp2#
要重命名文件,可以使用
rename
实用程序:brew install rename
例如,要更改当前目录中所有文件名中的搜索字符串:
删除“n”参数以应用更改。
更多信息:
man rename
tag5nh1u3#
你可以使用sed:
结果:
mv
替换为echo
说明:
pprl5pva4#
我有一批文件,看起来像这样:be90-01.png,需要将破折号改为下划线。我用了这个,效果很好:
2hh7jdfx5#
你可以使用
brew
安装rename
命令。只需要执行brew install rename
并使用它。oyxsuwqo6#
试试这个
这里是另一种方法:
0md85ypi7#
使用
mmv
vql8enpb8#
由于以编程方式重命名文件是有风险的(如果你错了,可能会有破坏性),我会使用一个专门为批量重命名而构建的具有干运行模式的工具,例如。renamer。
此命令将对当前目录中的所有文件进行操作,请使用
--dry-run
,直到您确信输出看起来正确为止:更多重命名器使用示例here。
93ze6v8z9#
zsh
现在是macOS的默认shell,它有自己的批量重命名功能,zmv
有时别名为mmv
到noglob zmv -W
。