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

批量转换十六进制文件名至十进制:Shell命令执行报错求助

批量将十六进制命名文件转为十进制的正确方法

错误原因分析

你之前的命令把mv的参数顺序搞反了:mv -- "$(($f))" $f里,第一个参数是转换后的十进制文件名(此时这个文件根本不存在),mv自然会报错找不到源文件。正确的顺序应该是现有文件名在前,新文件名在后。

解决方案

情况1:已经移除了.wav扩展名

直接调整mv的参数顺序即可,同时加上双引号避免文件名含空格时出问题:

for f in *; do
    mv -- "$f" "$(($f))"
done

如果要避免误处理非十六进制命名的文件,可以加个正则匹配,只处理0x开头的纯十六进制文件:

for f in 0x*; do
    if [[ "$f" =~ ^0x[0-9a-fA-F]+$ ]]; then
        mv -- "$f" "$(($f))"
    fi
done

情况2:保留.wav扩展名直接处理(更高效,不用先删扩展名)

可以通过参数展开分离文件名和扩展名,转换后再拼接回去:

for f in 0x*.wav; do
    # 去掉末尾的.wav,得到十六进制部分
    hex_part="${f%.wav}"
    # 转换为十进制
    dec_num="$((hex_part))"
    # 重命名
    mv -- "$f" "${dec_num}.wav"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:10:09