如何编写Shell脚本去除JPG文件名第一个下划线前的内容
批量重命名JPG文件:移除第一个下划线前的内容
这里提供几种简单可靠的Shell脚本实现方式,适配你给出的文件名格式:
方法1:纯Bash参数扩展(无需额外工具)
直接利用Bash内置的字符串处理功能,安全且无额外依赖:
for file in *.jpg; do # 跳过不存在的文件(避免匹配不到时处理"*.jpg"本身) [ -f "$file" ] || continue # 截取第一个下划线之后的所有内容作为新文件名 new_name="${file#*_}" # -n 参数防止意外覆盖已有文件,确认没问题后可移除 mv -n "$file" "$new_name" done
${file#*_}是Bash核心语法:#表示从字符串开头删除最短匹配的*_模式(即第一个下划线及之前的所有字符)。
方法2:用sed构造重命名命令(适合预览验证)
如果想先确认生成的重命名命令是否正确,可以用sed生成命令后再执行:
# 先预览命令,确认无误后再追加 | bash 执行 ls *.jpg | sed 's/\(.*_\)\(.*\)/mv -n "\0" "\2"/'
执行时直接运行:
ls *.jpg | sed 's/\(.*_\)\(.*\)/mv -n "\0" "\2"/' | bash
sed的正则将文件名拆分为「第一个下划线前的内容」和「剩余部分」,替换为对应的mv命令,确保每个文件都被正确重命名。
方法3:Perl版rename工具(简洁高效)
多数Linux发行版自带Perl实现的rename工具,一行命令即可完成:
# 先预览重命名效果,确认后移除-n参数 rename -n 's/^.*_//' *.jpg
正则表达式^.*_匹配文件名开头到第一个下划线的所有内容,替换为空字符串,直接完成批量重命名。
内容的提问来源于stack exchange,提问作者Thura
相关产品推荐
相关产品推荐

