Сравнение содержимого каталога по содержимому файла, игнорируя имя

Есть ли утилита для сравнения содержимого каталога только по содержимому файла?

У меня есть два набора файлов, большинство из них двоичные одинаковые, но некоторые из них разные; но каждый файл пары имеет разные имена, даже если их содержимое совпадает.

Существует ли инструмент, который может сравнивать содержимое каталога на основе фактического содержимого файла и не требует совпадения имени файла?

Я нахожусь на Windows, но также интересуюсь инструментами GNU/Linux.

0 ответов

Это может сработать, у меня были некоторые проблемы с этим, но я потратил на это достаточно времени, которым стоит поделиться, если это поможет кому-то другому.

Некоторые предостережения: Get-FileHash требует Powershell 4. Это ничего не делает с рекурсией.

$left = dir .\leftDir\* | Get-FileHash -Algorithm MD5
$right = dir .\rightDir\* | Get-FileHash -Algorithm MD5
$leftOnly = compare -passthru ($left | select hash) ($right | select hash)
$rightOnly = compare -passthru ($right | select hash) ($left | select hash)

echo "Print left only files"
foreach ($l in $leftOnly)
{
    foreach ($file in $left)
    {
        if ($file.Hash -eq $l.Hash) { echo $file.Path }
    }
}

echo ""

echo "Print right only files"
foreach ($r in $rightOnly)
{
    foreach ($file in $right)
    {
        if ($file.Hash -eq $r.Hash) { echo $file.Path }
    }
}
Другие вопросы по тегам