Considere a deduplicação. Existe alguma coisa que modifique esses arquivos diretamente em seu servidor (em vez de excluir e fazer upload de algo novo)? Se não houver, você pode criar links simbólicos ou vincular os arquivos idênticos. Isso economizaria espaço de armazenamento em seu servidor e também resolveria automaticamente seu problema de download, ao usar rsync -H
, que suporta hardlinks. Contanto que você esteja ciente das armadilhas do hardlink (a modificação no local para um modifica todas elas, já que elas são literalmente o mesmo arquivo), essa é de longe a melhor solução.
Você pode usar fdupes
para localizar arquivos duplicados com eficiência. Isso abrange duplicatas de conteúdo, infelizmente, não há nenhum requisito para o nome do arquivo. Você pode usar isso e filtrar a lista de duplicatas para nomes de arquivos; ou você poderia fazer a comparação sozinho. Usando find
, stat
, cmp
.
Exemplo completamente não refinado:
cd d1
find -type f -exec ./compare.sh d1/{} d2/{}
compare.sh:
if [ -f "$1" -a -f "$2" ]
then
asize='stat -c%s "$1"'
bsize='stat -c%s "$2"'
if [ "$asize" == "$bsize" ]
then
if cmp "$1" "$2"
then
echo IDENTICAL "$1" "$2"
else
echo DIFFERENT "$1" "$2"
fi
fi
fi
Já que você mencionou tarballs, em vez de simplesmente repetir se um arquivo é idêntico ou diferente, você poderia simplesmente fazer o eco deles em uma lista de arquivos include / exclude para usar com tar --files-from / --exclude-from
.