Como diferenciar duas pastas por inodes

3

Atualmente, estou usando um script para fazer backup de arquivos no meu computador.

Em poucas palavras, funciona assim:

rsync --link-dest=$FOLDER/current $SOURCE $DESTINATION

No entanto, acho que meu script pode estar duplicando alguns arquivos em vez de vinculá-los. Gostaria de verificar quais arquivos são (ou não) detectados como duplicados. Eu sei que o arquivo foi hardlinked corretamente dos dois arquivos compartilham o mesmo inode.

Como posso fazer um diff de duas pastas por inodes?

    
por NT3RP 07.12.2012 / 03:25

4 respostas

2

#!/bin/sh
cd path1
find . -type f -exec ls -i {} + | sort -k2 > ~/path1.lst
cd path2
find . -type f -exec ls -i {} + | sort -k2 > ~/path2.lst
cd ~
diff -U0 path1.lst path2.lst
    
por 06.01.2013 / 13:26
1

Se eu entendi corretamente, seus arquivos de backup são armazenados com duplicatas. Eu acho que você pode adicionar ao script date stamp ou / e checksum, como md5sum. Por exemplo:

DESTINATION="(date +%F-%H-%M).foo-files"

#!/bin/sh
### Checking md5 hash ###

x='foo'
y='bar'
z='echo $x | /usr/bin/md5sum'
a='echo $y | /usr/bin/md5sum'
if [ "$z" = "$a" ];then
        echo '=-=-=-Stuff_duplicate-=-=-='
        . . .
fi

Aviso: o hash MD5 será alterado se apenas um ou mais símbolos forem diferentes em dois arquivos.

Boa sorte! =)

    
por 07.12.2012 / 07:41
1

Não tenho certeza se entendi corretamente o que você quer dizer, mas quando menciona o link físico, espero que você queira dizer hardlink entre os backups e não os arquivos originais e de backup.

Você pode descobrir quais arquivos têm o mesmo inode com find.

find dest_dir -samefile orig_dir/file

este comando fornecerá uma lista de arquivos que corresponde ao mesmo inode que o original.

Se você colocar isso dentro de um loop, você pode fazer algo semelhante a

for i in 'ls orig_dir'
do
        result='find dir2/ -samefile dir1/firstfile'
        if [ result  != "" ]
        then
                echo "Duplicate: " $i
        fi
done

Isso imprimirá todos os arquivos que são hardlink entre o diretório original e o diretório de destino por inode. Observe que estou realizando o if com base na saída, pois o find sempre retorna true usando esses sinalizadores. da página man.

All options always return true. Except for -daystart, -follow and -regextype

    
por 06.01.2013 / 13:18
0

Você pode usar os parâmetros -v (verbose) e -n (dry run) no comando rsync para simular e visualizar as alterações no arquivo.

rsync -van src_dir/ dest_dir/ --delete 

Observe que o rsync anterior a 1.0.1 não funciona bem quando o arquivo existe no diretório de destino e link-dest dir.

    
por 18.07.2016 / 16:05