我有以下文件列表
aro_tty-mIF-45875564pmo_opt
aro_tty-mIF-45875664pmo_opt
aro_tty-mIF-45875964pmo_opt
aro_tty-mIF-45875514pmo_opt
aro_tty-mIF-45875524pmo_opt
我需要重命名为
aro_tty-mImpFRA-45875564pmo_opt
aro_tty-mImpFRA-45875664pmo_opt
aro_tty-mImpFRA-45875964pmo_opt
aro_tty-mImpFRA-45875514pmo_opt
aro_tty-mImpFRA-45875524pmo_opt
答案1
大多数标准 shell 都提供了一种在 shell 变量中进行简单文本替换的方法。http://tldp.org/LDP/abs/html/parameter-substitution.html解释如下:
${var/Pattern/Replacement}
First match of Pattern, within var replaced with Replacement.
因此,使用此脚本循环遍历所有适当的文件并重命名每个文件:
for file in aro_tty-mIF-*_opt
do
mv -i "${file}" "${file/-mIF-/-mImpFRA-}"
done
我添加了一个 -i 选项,以便您有机会确认每个重命名操作。与往常一样,在进行大量重命名或删除之前,您应该备份所有文件。
答案2
如果你没有 Perl 的rename
:
perl -e '
FILE:for $file (@ARGV){
($new_name = $file) =~ s/-mIF-/-mImpFRA-/
next FILE if -e $new_name;
rename $file => $new_name
}' *_opt
如果你做有 Perl 的rename
:
rename 's/-mIF-/-mImpFRA-/' *_opt
答案3
在尝试如下复杂命令之前,备份你的文件。你永远不知道一个拼写错误(我的或你的)会导致什么。
使用mv
(正如您在评论中所问的那样——rename
正如其他答案中所建议的那样可能更安全,特别是如果您的文件名中可以有空格或奇怪的字符)某种风格
for f in *_opt; do
a="$(echo $f | sed s/-mIF-/-mImpFRA-/)"
mv "$f" "$a"
done