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/')
在这个例子中,整个行都是一个命令。让我们逐步解释:
-  newname=:这是变量赋值的语法,表示接下来将要给变量newname赋值。
-  $(...):这是命令替换语法。其中的命令echo "$file" | sed 's/微信图片/ems/'会被执行,然后将其输出结果插入到这个位置。
-  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 语法的一部分。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!