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

如何将现有遍历mov文件的for循环改写成可遍历所有子目录的递归循环

递归遍历子目录批量转换mov为mp4的修改方案

原脚本仅能处理当前目录下的.mov文件,存在两处可优化点:大写的Rm需改为系统默认的小写删除命令rm,无匹配文件时会把通配符本身作为文件名执行命令。

方案1:Bash原生globstar方案(推荐,适配Bash 4.0及以上版本)

# 开启递归通配、无匹配文件时跳过循环的选项
shopt -s globstar nullglob
# 递归遍历所有层级子目录下的.mov文件
for i in **/*.mov; do
  ffmpeg -i "$i" "${i%.*}.mp4" -y
  rm "$i"
done

说明:

  • globstar 参数开启后,通配符**会匹配所有层级的子目录
  • nullglob 参数保证目录下无匹配的.mov文件时,不会进入循环执行命令
  • ffmpeg后加-y参数可自动覆盖已存在的同名mp4文件,无需手动确认
  • 无需删除原文件的话,直接去掉rm "$i"行即可

方案2:find命令方案(兼容所有POSIX shell环境,适配性更强)

find . -type f -name "*.mov" -print0 | while IFS= read -r -d '' i; do
  ffmpeg -i "$i" "${i%.*}.mp4" -y
  rm "$i"
done

说明:-print0和read -d ''的组合可以完美处理文件名带空格、特殊字符的场景,不会出现文件路径解析错误。

内容的提问来源于stack exchange,提问作者Peter Mark Friedladner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:36:02