Comment différencier deux dossiers par des inodes

J'utilise actuellement un script pour sauvegarder des files sur mon ordinateur.

En un mot, cela fonctionne comme ceci:

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

Cependant, je pense que mon script peut dupliquer certains files plutôt que de les relier. Je voudrais vérifier quels files sont (ou ne sont pas) détectés comme des duplicates. Je sais que le file a été correctement lié aux deux files partagent le même inode.

Comment puis-je faire un diff de deux dossiers par des inodes?

 #!/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 

Si je comprends bien, vos files de sauvegarde sont stockés avec des duplicates. Je pense que vous pouvez append au script date timbre ou / et checksum, comme md5sum. Par exemple:

 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 

Avis: MD5-hash sera modifié si un ou plusieurs symboles sont différents dans deux files.

Bonne chance! =)

Je ne sais pas si je comprends bien ce que vous voulez dire, mais quand vous mentionnez hardlink, j'espère que vous voulez dire lien entre les sauvegardes et non les files d'origine et de sauvegarde.

Vous pouvez find quels files ont le même inode avec find.

find dest_dir -samefile orig_dir / file

cette command vous fournira une list de files qui correspond au même inode que l'original.

Si vous le mettez dans une boucle, vous pouvez faire quelque chose de semblable

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

Cela imprimera tous les files qui sont des liens entre le directory d'origine et le directory de destination par inode. Notez que j'effectue le if basé sur la sortie car find renvoie toujours true en utilisant ce flags. de la page de manuel.

Toutes les options returnnent toujours vrai. Sauf pour-daystart, -follow et -regextype

Vous pouvez utiliser les parameters -v (verbose) et -n (exécution à sec) dans la command rsync pour simuler et afficher les modifications du file.

 rsync -van src_dir/ dest_dir/ --delete 

Notez que rsync avant 1.0.1 ne fonctionne pas correctement lorsque le file existe à la fois dans le directory de destination et dans le directory link-dest .