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

如何编写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读取准确
  • 路径变量用双引号包裹:避免路径含空格或特殊字符时出现解析错误

运行步骤

  1. 将代码保存为move_mp4.sh
  2. 修改脚本中的路径参数为实际路径
  3. 赋予执行权限:chmod +x move_mp4.sh
  4. 运行脚本:./move_mp4.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:22:40