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

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 语法的一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公孙无语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值