📅  最后修改于: 2023-12-03 15:05:41.881000             🧑  作者: Mango
本文介绍了一个基于 Shell-Bash 的 Ubuntu 视频重复查找器。该程序可以扫描指定目录中的视频文件,并找出其中的重复文件。程序利用视频文件的哈希值来判断是否为重复文件,避免了对文件名或大小的依赖。
video-duplicate-finder.sh
。chmod +x video-duplicate-finder.sh
命令,将脚本文件设置为可执行。./video-duplicate-finder.sh /path/to/your/video/directory
命令,即可开始查找重复视频文件。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 界面的依赖。