You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中如何按分隔符拆分字符串并交换子串位置

批量重命名方案优化

你当前使用的ls管道awk的方案仅能打印转换后的文件名,无法完成实际重命名操作,同时依赖ls解析文件名的方式存在兼容性缺陷,遇到带空格、特殊字符的文件名时会出现解析错误。以下是两种更稳定高效的实现方案:

方案1:Bash原生遍历(兼容性最高,无外部依赖)

纯Bash内置语法实现,不需要依赖awk、rename等外部命令,适配所有标准Bash环境:

# 先执行下面的预览命令确认输出符合预期
for file in *.txt; do
    name="${file%.*}"
    ext="${file##*.}"
    echo mv -- "$file" "${ext}.${name}"
done

# 确认预览无误后,去掉echo执行实际重命名
for file in *.txt; do
    name="${file%.*}"
    ext="${file##*.}"
    mv -- "$file" "${ext}.${name}"
done

语法说明:

  • ${file%.*}:删除变量file中最后一个.及之后的所有内容,提取得到文件名前缀a/b/c等
  • ${file##*.}:删除变量file中最后一个.及之前的所有内容,提取得到后缀txt
  • 命令中的--用于避免文件名以-开头时,被mv误识别为命令参数

方案2:rename单行命令(更简洁)

如果环境中预装了Perl版本的rename(多数主流Linux发行版、macOS通过brew安装后默认带该工具),可以直接用正则匹配完成批量重命名:

# 加-n参数先预览重命名结果
rename -n 's/^([^.]+)\.txt$/txt.$1/' *.txt

# 预览无误后去掉-n执行实际重命名
rename 's/^([^.]+)\.txt$/txt.$1/' *.txt

内容的提问来源于stack exchange,提问作者Prajwal T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:24:03