linux shell 使用mv 循环替换文件名

2023-12-18 15:41:52

linux shell 使用mv 循环替换文件名

你可以使用 rename 命令来批量重命名文件。在 Linux 系统中,rename 可以接受正则表达式,并进行文件名的替换。

假设你的文件都是以 “微信图片” 开头,你可以使用如下命令:

rename 's/微信图片/ems/' 微信图片*

这个命令会把当前目录下所有以 “微信图片” 开头的文件名中的 “微信图片” 替换为 “ems”。

请注意,rename 的具体使用方式可能因系统而异。在某些系统中,rename 可能会被命名为 prename。如果你使用的是 macOS,请确保你安装了 rename 命令。

如果你的系统不支持 rename 命令,你可以使用 mv 命令结合循环来实现:

for file in 微信图片*; do
    newname=$(echo "$file" | sed 's/微信图片/ems/')
    mv "$file" "$newname"
done

这个循环会遍历所有以 “微信图片” 开头的文件,并将文件名中的 “微信图片” 替换为 “ems”。

核心脚本解释:

newname=$(echo "$file" | sed 's/微信图片/ems/')

在这个例子中,整个行都是一个命令。让我们逐步解释:

  1. newname=:这是变量赋值的语法,表示接下来将要给变量 newname 赋值。

  2. $(...):这是命令替换语法。其中的命令 echo "$file" | sed 's/微信图片/ems/' 会被执行,然后将其输出结果插入到这个位置。

  3. echo "$file" | sed 's/微信图片/ems/':这是一个由管道 | 连接的两个命令。首先,echo "$file" 会输出变量 $file 的内容,然后将其传递给 sed 命令进行处理,sed 's/微信图片/ems/' 是一个替换操作,将字符串中的 “微信图片” 替换为 “ems”。

整个行的目的是将文件名中的 “微信图片” 替换为 “ems” 并将结果赋给变量 newname

在这个例子中,由于整个行只包含一个命令,因此在该行中没有显式添加分号 ; 也是有效的。在单个命令的情况下,Shell 通常会识别行末尾作为命令的结束,因此分号是可选的。

注意事项:

在 Shell 脚本中,变量赋值时不应该有空格,因为空格会被解释为命令的一部分。因此,应该写成 newname= 而不是 newname =

正确的写法:

newname=$(echo "$file" | sed 's/微信图片/ems/')

在这里,$(...) 语法用于执行命令并将其输出赋给变量 newname

如果你写成 newname =,Shell 将尝试执行一个名为 newname 的命令,而不是将等号右侧的内容赋给 newname 变量。

因此,请确保在变量赋值时不要有空格,这是 Shell 语法的一部分。

文章来源:https://blog.csdn.net/qq_39054069/article/details/135062451
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。