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

Bash脚本遍历目录重命名srt文件出现command not found错误如何解决

错误原因
  1. 第二行语法错误:你同时嵌套了$()和反引号两种命令替换符号,会导致shell先执行find管道输出的内容,把输出的目录名当成命令执行,所以第一个目录名Lawless被识别为要执行的命令,才会报Lawless: command not found的错误。
  2. 手动转义目录名的逻辑完全多余,Bash中只要给变量加双引号引用,天然就能处理带空格、特殊字符的路径,自行转义反而会引入额外问题。
  3. 其他潜在问题:直接用cd $dirm没有判断是否进入成功,后续cd ..可能会跑到意料之外的路径;用ls+grep提取文件名的方式不稳定,遇到特殊文件名容易出错。
修复后的可用脚本
#!/bin/bash
# 检查传入参数合法性
if [ $# -ne 1 ] || [ ! -d "$1" ]; then
    echo "用法: $0 <目标目录路径>"
    exit 1
fi

# 遍历目标路径下的所有一级子目录
find "$1" -mindepth 1 -maxdepth 1 -type d | while read -r dirm; do
    echo "处理目录: $dirm"
    # 保存当前路径后进入目标目录,进入失败直接跳过避免路径混乱
    pushd "$dirm" > /dev/null || continue
    
    # 提取视频文件名前缀
    if ls *.mp4 >/dev/null 2>&1; then
        video_name=$(basename -- *.mp4 .mp4)
    elif ls *.mkv >/dev/null 2>&1; then
        video_name=$(basename -- *.mkv .mkv)
    else
        echo "目录 $dirm 未找到mp4/mkv视频文件,跳过"
        popd > /dev/null
        continue
    fi
    
    # 重命名字幕
    mv -- *.srt "${video_name}.srt"
    echo "字幕已重命名为: ${video_name}.srt"
    
    # 回到之前的工作路径
    popd > /dev/null
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:12:01