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

如何用Bash脚本按导演名整理电影信息文本文件

实现按导演名归类电影文件的Shell脚本

没问题,这需求我之前也碰到过,给你写个Shell脚本就能搞定,还会把每个步骤讲清楚,方便你根据实际情况调整。

整体思路

逻辑其实很清晰,就三步:

  • 挨个处理当前目录下的电影文本文件
  • 从每个文件内容里提取导演名字
  • 创建对应导演的文件夹,把文件挪进去

基础版脚本(导演名无空格)

如果你的导演名都是单个单词(比如Nolan、Spielberg),用这个版本就足够了:

#!/bin/bash

# 遍历当前目录下所有txt格式的电影文件(后缀不对就改这里)
for file in *.txt; do
    # 跳过不是文件的条目(比如当前目录没txt文件时,*.txt会被当成字符串)
    [ -f "$file" ] || continue

    # 提取导演名:这里假设年份是最后一个字段,导演名是倒数第二个字段
    director=$(awk '{print $(NF-1)}' "$file")
    # 清理导演名前后的空格,避免文件夹名有多余空格
    director=$(echo "$director" | xargs)

    # 确保导演名有效,再创建文件夹并移动文件
    if [ -n "$director" ]; then
        # -p参数:文件夹已存在也不会报错,省心
        mkdir -p "$director"
        mv "$file" "$director/"
        echo "✅ 已将 $file 移到 $director 文件夹"
    else
        echo "⚠️ 警告:$file 里没找到有效导演名,跳过处理"
    fi
done

进阶版脚本(导演名带空格)

如果导演名是多个单词(比如Christopher Nolan、Steven Spielberg),就需要调整提取逻辑。这里假设年份是最后四位数字,用正则来匹配年份前的导演名:

#!/bin/bash

for file in *.txt; do
    [ -f "$file" ] || continue

    # 用正则提取年份前的导演名(前提:导演名不含数字,年份是最后四位)
    director=$(sed -E 's/.* ([^0-9]+) [0-9]{4}$/\1/' "$file" | xargs)

    if [ -n "$director" ]; then
        mkdir -p "$director"
        mv "$file" "$director/"
        echo "✅ 已将 $file 移到 $director 文件夹"
    else
        echo "⚠️ 警告:$file 里没找到有效导演名,跳过处理"
    fi
done

实用小贴士

  1. 测试先行:如果怕误操作,可以先把mv "$file" "$director/"改成echo "准备移动:$file → $director/",先看输出是否符合预期,再改成实际的移动命令。
  2. 文件后缀调整:如果你的电影文件不是.txt,把*.txt改成对应的后缀(比如*.movie),或者用*匹配所有文件,但注意别把脚本本身也移走了!
  3. 特殊字符处理:如果导演名里有特殊字符(比如O'Neill),脚本也能正常处理,因为我们用了双引号包裹变量,避免空格和特殊字符出问题。

内容的提问来源于stack exchange,提问作者Kumar Chokshanada Sangakkara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:29:44