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

如何让Bash脚本按本地化不区分大小写字母顺序枚举MP4文件并获取尺寸

问题

我需要枚举目录中的所有MP4视频文件,并使用FFmpeg的ffprobe工具获取它们的尺寸。目前使用以下Bash脚本可正常运行:

for filename in *.mp4; do
printf "$filename;"
ffprobe -v error -select_streams v -show_entries stream=width,height -of csv=p=0:s=";" ${filename}
done

执行后得到如下CSV格式结果:

video7.mp4;320;200
video1.mp4;800;600
videoAlpha.mp4;1024;1024

现在希望将文件按本地化、不区分大小写的字母顺序进行枚举,请问该如何修改脚本?

解决方案

要实现目标排序效果,可通过以下两种方式修改脚本:

方法一:临时配置本地化排序规则

在循环前设置LC_COLLATE环境变量,让Bash的通配符展开自动遵循本地化的不区分大小写排序规则:

# 以en_US.UTF-8为例,可替换为你实际使用的本地化标识
LC_COLLATE=en_US.UTF-8
for filename in *.mp4; do
  printf "$filename;"
  ffprobe -v error -select_streams v -show_entries stream=width,height -of csv=p=0:s=";" "$filename"
done
# 可选:执行完后恢复原有环境设置
# unset LC_COLLATE

注:若你的系统默认本地化已支持不区分大小写排序,可省略环境变量设置,但显式配置能保证跨环境的一致性。

方法二:显式排序文件列表

如果不想改动全局环境变量,可以先提取MP4文件列表,用sort命令完成本地化不区分大小写排序后再循环处理:

for filename in $(ls -1 *.mp4 | sort -f --locale=current); do
  printf "$filename;"
  ffprobe -v error -select_streams v -show_entries stream=width,height -of csv=p=0:s=";" "$filename"
done
  • -f 参数让sort忽略大小写差异
  • --locale=current 指定使用当前系统的本地化排序规则,确保排序符合区域习惯

两种方法都能让输出按video1.mp4、video7.mp4、videoAlpha.mp4的顺序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:51:04