如何用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
实用小贴士
- 测试先行:如果怕误操作,可以先把
mv "$file" "$director/"改成echo "准备移动:$file → $director/",先看输出是否符合预期,再改成实际的移动命令。 - 文件后缀调整:如果你的电影文件不是
.txt,把*.txt改成对应的后缀(比如*.movie),或者用*匹配所有文件,但注意别把脚本本身也移走了! - 特殊字符处理:如果导演名里有特殊字符(比如
O'Neill),脚本也能正常处理,因为我们用了双引号包裹变量,避免空格和特殊字符出问题。
内容的提问来源于stack exchange,提问作者Kumar Chokshanada Sangakkara
相关产品推荐
相关产品推荐

