find -type f -exec md5sum '{}' ';' | uniq --all-repeated=separate -w 33 | cut -c 35-
我正在尝试使用 md5sum 删除在某个目录中具有完全相同内容的文件,以放入我的 bash 文件的末尾。上面的代码是我在尝试研究 md5sum 时遇到的,但它是针对 uniq 的,我正在使用小狗软件。另外我对 linux 很陌生,所以我可能错过了那行代码中的一些东西。
编辑:还有其他方法可以获取唯一文件吗?
find -type f -exec md5sum '{}' ';' | uniq --all-repeated=separate -w 33 | cut -c 35-
我正在尝试使用 md5sum 删除在某个目录中具有完全相同内容的文件,以放入我的 bash 文件的末尾。上面的代码是我在尝试研究 md5sum 时遇到的,但它是针对 uniq 的,我正在使用小狗软件。另外我对 linux 很陌生,所以我可能错过了那行代码中的一些东西。
编辑:还有其他方法可以获取唯一文件吗?
您可以使用 fdupes ( sudo apt-get install fdupes
) 它完成所有工作。
这些方面的东西(未经测试):
#!/bin/bash
shopt -s globstar nullglob
shopt -u failglob
declare -A files=()
declare -A nbHash=()
for f in **; do
[[ -f "$f" ]] || continue
md5sum=$(md5sum -- "$f")
files[$f]=$md5sum
((nbHash[$md5sum]+=1))
done
for f in "${!files[@]}"; do
if ((nbHash[${files[$f]}]-->1)); then
rm -- "$f"
fi
done
制作 2 个关联数组:
files
:键是文件名,值是 md5sumnbHash
:键是 md5sum,值是 md5sum 的文件数完成这些关联数组后,遍历文件(即通过数组的键files
),并确定是否存在多个具有相同 md5sum 的文件(您从nbHash
数组中获得此信息),如果是,则 rm 文件.