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

如何在Bash中递归为文件加字母序列前缀,实现电视按序播放?

在Bash中递归为视频文件添加字母序列前缀以实现正确播放顺序

问题场景

你的U盘子目录中存在一批视频文件,原文件名示例如下:

1- Lists.mp4
10- Filter Function.mp4
11- List Comprehensions.mp4
12- Zip Function.mp4
13- Stacks.mp4
2- Accessing Items.mp4
20- Dictionary Comprehensions.mp4

由于电视会按错误的字典序排序播放,需要将文件重命名为带字母序列前缀的形式,示例如下:

a 1- Lists.mp4
b 2- Accessing Items.mp4
c 10- Filter Function.mp4
d 11- List Comprehensions.mp4
e 12- Zip Function.mp4
f 13- Stacks.mp4
g 20- Dictionary Comprehensions.mp4

以此实现按正确顺序连续播放。

解决方案

以下是可直接使用的Bash脚本,实现递归遍历文件、按数字自然排序、生成字母序列前缀并重命名的完整流程:

#!/bin/bash

# 将数字转换为a→z→aa→ab...形式的字母前缀
generate_prefix() {
    local num=$1
    local prefix=""
    while (( num > 0 )); do
        (( num-- ))
        local char_code=$(( num % 26 + 97 ))
        prefix=$(printf "\\$(printf '%03o' $char_code)")$prefix
        (( num /= 26 ))
    done
    echo "$prefix"
}

# 初始化前缀索引(从0开始对应第一个文件的a前缀)
i=0

# 递归查找所有mp4文件,按文件名前缀数字自然排序后遍历
find . -type f -name "*.mp4" -print0 | sort -zV | while IFS= read -r -d '' file_path; do
    # 拆分文件路径为目录和文件名
    file_dir=$(dirname "$file_path")
    file_name=$(basename "$file_path")
    
    # 生成对应字母前缀
    current_prefix=$(generate_prefix $((i++)))
    
    # 构造新文件名
    new_file_name="${current_prefix} ${file_name}"
    new_file_path="${file_dir}/${new_file_name}"
    
    # 先打印重命名操作(测试阶段),确认无误后可移除echo直接执行mv
    echo mv -v "$file_path" "$new_file_path"
    # mv -v "$file_path" "$new_file_path"
done

脚本说明

  1. 字母前缀生成:generate_prefix函数将递增数字转换为要求的字母序列,0对应a,25对应z,26对应aa,以此类推。
  2. 文件遍历与排序:find命令递归查找所有.mp4文件,sort -zV确保文件名按前缀数字自然排序(避免1、10、2的错误顺序),同时处理含空格的文件名。
  3. 重命名操作:遍历排序后的文件,为每个文件生成对应的字母前缀,构造新文件名。测试阶段保留echo仅打印操作,确认正确后再移除echo执行实际重命名。

注意事项

  • 执行前请先备份文件,或在测试目录验证脚本效果,避免误操作导致文件丢失。
  • 若存在非数字开头的.mp4文件,排序结果可能不符合预期,需根据实际文件名格式调整排序逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:57:37