Linux系统下如何批量重命名文件移除指定前缀及中间字符串
Linux 批量重命名匹配规则压缩文件实现方案
通用无依赖方案(全发行版可用)
不需要依赖特殊工具,直接用bash循环加正则处理即可,强烈建议先执行预览命令核对重命名规则,避免改错文件:
for file in download_*.tar.gz; do newname=$(echo "$file" | sed -E 's/^download_([^_]+)_[0-9]+_[0-9]+\.tar\.gz$/\1.tar.gz/') echo "待重命名: $file -> $newname" done
预览输出的新旧文件名对应关系完全符合预期后,执行实际重命名命令:
for file in download_*.tar.gz; do newname=$(echo "$file" | sed -E 's/^download_([^_]+)_[0-9]+_[0-9]+\.tar\.gz$/\1.tar.gz/') mv -v -- "$file" "$newname" done
命令逻辑说明:
- 遍历当前目录下所有
download_开头、.tar.gz结尾的目标文件 - 正则匹配规则:捕获
download_后第一个下划线前的文件名主体,跳过后续_<数字>_<数字时间戳>字段,拼接保留原.tar.gz后缀 mv的--参数用于兼容带特殊字符的文件名,-v参数会打印每一步重命名操作方便回溯
Perl版rename快捷方案(Debian/Ubuntu等系统适用)
如果你的系统默认搭载Perl版本的rename工具,可以直接用单行命令完成,同样先加-n参数做预览:
# 预览模式,不会实际修改文件名 rename -n 's/^download_([^_]+)_\d+_\d+\.tar\.gz$/$1.tar.gz/' download_*.tar.gz # 确认输出无误后执行实际重命名 rename 's/^download_([^_]+)_\d+_\d+\.tar\.gz$/$1.tar.gz/' download_*.tar.gz
注意:不要跳过预览步骤直接执行重命名,避免正则匹配偏差导致文件名错乱。
内容的提问来源于stack exchange,提问作者jmginer
相关产品推荐
相关产品推荐

