如何在 Unix 中使用单个命令或脚本重命名多个文件?

如何在 Unix 中使用单个命令或脚本重命名多个文件?

我有以下文件列表

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

相关内容