📜  ubuntu 视频重复查找器 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:05:41.881000             🧑  作者: Mango

Ubuntu 视频重复查找器 - Shell-Bash

本文介绍了一个基于 Shell-Bash 的 Ubuntu 视频重复查找器。该程序可以扫描指定目录中的视频文件,并找出其中的重复文件。程序利用视频文件的哈希值来判断是否为重复文件,避免了对文件名或大小的依赖。

使用方法
  1. 下载脚本文件 video-duplicate-finder.sh
  2. 在终端中执行 chmod +x video-duplicate-finder.sh 命令,将脚本文件设置为可执行。
  3. 在终端中执行 ./video-duplicate-finder.sh /path/to/your/video/directory 命令,即可开始查找重复视频文件。
  4. 查找结果将保存在 duplicates.txt 文件中。
代码实现

该程序的代码如下:

#!/bin/bash

# 计算文件哈希值
hash_video() {
  ffmpeg -v quiet -i "$1" -f md5 - 2>/dev/null | awk '/MD5/{print $NF}'
}

# 扫描目录中的视频
scan_directory() {
  local dir="$1"
  local stats=( $(find "$dir" -type f \( -name '*.mp4' -o -name '*.mkv' -o -name '*.avi' \) -printf "%s %p\n" 2>/dev/null) )
  local n=${#stats[@]}

  for ((i=0; i<$n; i+=2)); do
    local size1=${stats[i]}
    local file1=${stats[i+1]}
    for ((j=i+2; j<$n; j+=2)); do
      local size2=${stats[j]}
      local file2=${stats[j+1]}
      if [[ $size1 -eq $size2 ]]; then
        local hash1=$(hash_video "$file1")
        local hash2=$(hash_video "$file2")
        if [[ "$hash1" == "$hash2" ]]; then
          echo "$file1" >> duplicates.txt
          echo "$file2" >> duplicates.txt
        fi
      fi
    done
  done
}

# 检查输入参数
if [[ $# -eq 0 ]]; then
  echo "Usage: $0 <directory>"
  exit 1
fi

# 检查命令是否存在
if [[ ! -x $(which ffmpeg) ]]; then
  echo "Error: ffmpeg is required to run this script."
  exit 1
fi

# 执行脚本
if [[ -d "$1" ]]; then
  cd "$1"
  scan_directory .
else
  echo "Error: directory not found."
  exit 1
fi

该程序包含了以下几个函数:

  • hash_video:计算视频文件的 MD5 哈希值。
  • scan_directory:扫描目录中的视频文件,并查找重复文件。
  • main:检查命令行参数和命令是否存在,并执行 scan_directory 函数。

其中,scan_directory 函数包含了两个嵌套的循环,用于比较所有的视频文件。该函数首先调用 find 命令查找指定目录中的视频文件,然后将所有文件的大小和路径保存在数组 stats 中。接着,循环比较每两个文件的大小和哈希值,如果满足条件,则将两个文件的路径保存在 duplicates.txt 文件中。

总结

该Ubuntu 视频重复查找器是一款基于 Shell-Bash 的程序,可以快速找出指定目录中的重复视频文件。该程序利用视频文件的哈希值来判断是否为重复文件,并且避免了对文件名或大小的依赖。该程序可以在终端中方便地执行,节省了对 GUI 界面的依赖。