edite para correção & opção clareza - eu esqueci '- breve'
diff -rs --brief "$dir1" "$dir2"
-r, --recursive recursively compare any subdirectories found
-s, --report-identical-files report when two files are the same
-q, --brief report only when files differ
--speed-large-files assume large files and many scattered small changes
e adicione outras opções para testar, dependendo do que você está comparando:
-i, --ignore-case ignore case differences in file contents
-b, --ignore-space-change ignore changes in the amount of white space
-B, --ignore-blank-lines ignore changes whose lines are all blank
--strip-trailing-cr strip trailing carriage return on input
--ignore-file-name-case ignore case when comparing file names
diff -rs irá ler cada byte do original e copiar, e relatar arquivos que são os mesmos.
O formato de saída do diff é definido por POSIX, então é bonito portátil. Você pode querer adicionar algo como:
| tee diff-out.1 | grep -v -Ee 'Files. * e. * são idênticos'
Você pode usar chksums ou hashes, mas você precisa mantê-los sincronizado com as árvores de arquivos, então você voltaria a ler cada byte de todos os arquivos de qualquer maneira.
EDIT - muito longo para ser um comentário, em resposta a:
files over 10GB are not verifying
Você pode querer experimentar esta opção de diferenças: --speed-files grandes
É possível que o diff que você está usando não esteja lidando bem com arquivos muito grandes (maiores que a memória do sistema, por exemplo) e relatando assim as diferenças entre os arquivos que são realmente os mesmos.
Eu achava que havia uma opção -h ou um 'bdiff' que funcionava melhor arquivos grandes, mas não consigo encontrar um no Fedora. Eu acredito que o opções --speed-large-files é um sucessor para um '-h' "half-hearted compare "opção.
Uma abordagem diferente seria repetir o comando rsync que você usou, com '-vin' (verbose, itemize, no_run). Isso informaria qualquer diferenças que o rsync encontra - e não deve haver nenhuma.
Para mover alguns arquivos, você está olhando para um script como:
if [ cmp -s "$dir1/$path" "$dir2/$path" ] ; then
target="$dir2/verified/$path"
mkdir -p $(basename "$target")
mv "$dir2/$path" "$target"
fi
mas não recomendo fazer isso. A questão subjacente é "como posso ter certeza de que o rsync copiou uma hierarquia de arquivos corretamente? " e se você puder demonstrar para si mesmo que o rsync está funcionando bem, com diff ou alguma outra ferramenta, então você pode confiar no rsync, em vez de trabalhar em torno dele.
rsync -vin irá comparar com base em quaisquer outras opções que você der. Eu pensei que o padrão era checksum, mas você está certo, -c ou --checksum é necessário para isso.
O utilitário diff é realmente destinado a arquivos de linhas de texto, mas deve reportar 'idêntico' sob -s para arquivos binários.
O --brief deve suprimir qualquer saída de conteúdo de arquivo - minhas desculpas por ter negligenciado isso antes - foi semi-enterrado em um roteiro feio.