BASH:查找重复文件(MAC/LINUX 兼容)

adr*_*ian 7 linux mac bash

我正在寻找与 Mac 兼容的 bash 脚本,以在目录中查找重复文件。

小智 10

它在我的 mac 上对我有用,您将通过其 md5 值捕获重复文件:

find ./ -type f -exec md5 {} \; | awk -F '=' '{print $2 "\t" $1}' | sort
Run Code Online (Sandbox Code Playgroud)

  • 在`sort`之后添加`| uniq -d -f 1 -s 33` 它将只输出重复项 (2认同)

l0b*_*0b0 5

不知道有关Mac兼容的,但是对我的作品(TM):

#!/bin/bash
[ -n "$1" ] || exit 1
exec 9< <( find "$1" -type f -print0 )
while IFS= read -r -d '' -u 9
do
    file_path="$(readlink -fn -- "$REPLY"; echo x)"
    file_path="${file_path%x}"
    exec 8< <( find "$1" -type f -not -path "$file_path" -print0 )
    while IFS= read -r -d '' -u 8 OTHER
    do
        cmp --quiet -- "$REPLY" "$OTHER"
        case $? in
            0)
                echo -n "cmp -- "
                printf %q "${REPLY}"
                echo -n ' '
                printf %q "${OTHER}"
                echo ""
                break
                ;;
            2)
                echo "\`cmp\` failed!"
                exit 2
                ;;
            *)
                :
                ;;
        esac
    done
done
Run Code Online (Sandbox Code Playgroud)

结果是一组您可以运行以检查结果是否正确的命令:)

编辑:最后一个版本适用于非常奇怪的文件名,例如:

$'/tmp/--$`\\! *@ \a\b\E\E\f\r\t\v\\"\' \n'
Run Code Online (Sandbox Code Playgroud)