Aqui está meu script bruto para verificar arquivos em duas pastas e, se algum arquivo tiver um problema, copie-o. Eu sugeriria usar este após copiar arquivos.
A idéia básica é usar hexdump
para verificar os arquivos. O script usa dois diretórios como entradas. Limitação: Só processa os arquivos dentro do diretório, não os subdiretórios (porque ainda não sei como fazê-lo). Portanto, você pode usar isso se não tiver muitas pastas, mas se tiver várias pastas e subpastas, executar o script manualmente para cada diretório poderá ser entediante. Alimento para o pensamento futuro: crie uma lista de pastas e subpastas para origem e destino, e depois automatize o script passando pelas duas listas .
Script em ação
Eu tester2 como diretório de origem e testerdir como destino, onde eu já copiei arquivos. Na linha 123 eu corro o script para verificar os arquivos sendo copiados. Na linha 124 mudo o conteúdo do arquivo tester2 / hello (mude seu conteúdo de "TEST" para "TESTER"). Na linha 125 você pode ver que o script detecta que o arquivo hello foi alterado / alterado em tamanho / corrompido e copia o arquivo novamente. Na linha 126 você pode ver que o arquivo hello na pasta de destino corresponde ao da pasta de origem.
Script
#!/bin/bash
# Author: Serg Kolo
# Date: Mon May 25 01:19:59 MDT 2015
# Description: script to verify files in two directories
# written for http://askubuntu.com/q/627817/295286
copy_the_file ()
{
cp -f "$SOURCE_DIR"/"$filename" "$DEST_DIR"/"$filename"
}
if [ $# -ne 2 ]; then
printf "Usage: verify-files.sh SOURCE_DIR DEST_DIR"
exit 1
fi
SOURCE_DIR=""
DEST_DIR=""
IFS=":"
for filename in $(find "$SOURCE_DIR" -maxdepth 1 -type f -printf "%f:" | sed 's/.\///g' )
do
#echo "$filename"
#echo "$DEST_DIR"/"$filename"
if [ -e "$DEST_DIR"/"$filename" ];then
hexdump "$SOURCE_DIR"/"$filename" > .dump1
hexdump "$DEST_DIR"/"$filename" > .dump2
diff .dump1 .dump2 > /dev/null
if [ $? -eq 0 ];then
echo " "$filename" is OK "
else
echo ""$filename" has a problem"
copy_the_file
fi
else
copy_the_file
fi
done