如何编写Bash脚本迁移CSV指定ID对应的MP4文件
Bash脚本实现匹配ID的MP4文件迁移
前提准备
- 确认源目录路径(存放
[id].mp4文件的目录)、目标目录路径(要迁移到的目录)、CSV文件路径(包含需要匹配的ID列表) - 明确CSV格式:默认假设每行一个纯ID(无表头);若CSV含表头或多列,后续会给出对应处理方案
基础实现脚本(纯ID无表头CSV)
#!/bin/bash # 配置实际路径参数 SOURCE_DIR="/path/to/source" TARGET_DIR="/path/to/target" CSV_FILE="/path/to/id_list.csv" # 确保目标目录存在,不存在则创建 mkdir -p "$TARGET_DIR" # 逐行读取CSV中的ID,匹配并移动文件 while IFS= read -r id; do filename="${id}.mp4" source_path="${SOURCE_DIR}/${filename}" # 检查文件是否存在,存在则迁移 if [ -f "$source_path" ]; then echo "迁移文件: $filename" # -n 选项避免覆盖目标目录中已存在的同名文件,需强制覆盖可去掉-n mv -n "$source_path" "$TARGET_DIR/" else echo "未找到文件: $filename" fi done < "$CSV_FILE"
进阶处理(含表头/多列CSV)
如果CSV有表头(第一行非ID),或ID是逗号分隔多列中的第一列,可借助awk提取有效ID:
#!/bin/bash SOURCE_DIR="/path/to/source" TARGET_DIR="/path/to/target" CSV_FILE="/path/to/id_list.csv" mkdir -p "$TARGET_DIR" # 跳过第一行表头,提取第一列ID(若为逗号分隔,将awk命令改为 awk -F ',' 'NR>1 {print $1}') awk 'NR>1 {print $1}' "$CSV_FILE" | while IFS= read -r id; do filename="${id}.mp4" source_path="${SOURCE_DIR}/${filename}" if [ -f "$source_path" ]; then mv -n "$source_path" "$TARGET_DIR/" echo "已迁移: $filename" else echo "文件不存在: $filename" fi done
关键细节说明
mkdir -p "$TARGET_DIR":-p保证目录不存在时自动创建,且不会因目录已存在报错IFS= read -r id:IFS=防止ID前后空格被截断,-r禁止反斜杠转义,确保ID读取准确- 路径变量用双引号包裹:避免路径含空格或特殊字符时出现解析错误
运行步骤
- 将代码保存为
move_mp4.sh - 修改脚本中的路径参数为实际路径
- 赋予执行权限:
chmod +x move_mp4.sh - 运行脚本:
./move_mp4.sh
内容的提问来源于stack exchange,提问作者master00
相关产品推荐
相关产品推荐

