J'avais l'habitude de copier des données à partir de supports d'enregistrement tels que des appareils photo numériques et des caméras d'action (mémoire USB, carte SD, etc.) vers un autre SSD externe de grande capacité et les stocker, mais la quantité restante du SSD externe est faible. .. Il semble y avoir des données en double dans le SSD externe, je veux donc le supprimer. Des fichiers en double se sont produits
――Après avoir copié sur un SSD externe, je l'ai ajouté avant d'effacer le fichier source de la copie sur le support d'enregistrement, puis je l'ai de nouveau sauvegardé.
Il semble que la cause soit. J'ai décidé d'écrire un script car il est difficile de vérifier le contenu des deux répertoires sans être sensible à la casse.
Si vous exécutez avec les deux répertoires que vous souhaitez comparer comme arguments, pour chaque sous-répertoire, pour chaque fichier, répertoire et lien symbolique Comparez l'horodatage avec la taille du fichier. Pour les fichiers de même taille, comparez avec la fonction `` filecmp.cmp (..., shallow = False) ''. Affichez le résultat de la comparaison avec le symbole suivant devant le nom du fichier.
--S'il y a un fichier du même nom dans la cible de comparaison, le symbole (>
, =
, <
) représentant l'horodatage (mtime) et le symbole (++
, - 3 octets combinant
,! =
,==
,
,!!
)
Par exemple, ===
est "même horodatage et contenu", > ++
est "plus récent et plus volumineux que le fichier du même nom dans le répertoire à comparer", et =! =
Est "à comparer". L'horodatage et la taille du fichier sont identiques à ceux du fichier du même nom dans le répertoire, mais le contenu (données) est différent. " Dans le cas d'un lien symbolique, «= (deux caractères vides)» est un symbole indiquant que «l'horodatage et le chemin de destination du lien sont identiques» et «= !!» est un symbole indiquant que «l'horodatage est le même mais le chemin de destination du lien est différent» Devenir.
Exemple d'exécution
% ./cmp_dirtree ./data0 ./data1
### ========================================
1: ./data0
2: ./data1
### ========================================
###-----------------< M4ROOT >--------------------
1: ./data0/M4ROOT
2: ./data1/M4ROOT
### Sub directories: ---
1: =++ : 2019/02/09 12:43:35 : 952 : CLIP
2: =-- : 2019/02/09 12:43:35 : 476 : CLIP
1: === : 2019/02/09 12:43:35 : 68 : GENERAL
2: === : 2019/02/09 12:43:35 : 68 : GENERAL
(Omis à mi-chemin)
### File lists: ---
1: >== : 2019/11/05 03:47:45 : 6148 : .DS_Store
2: <== : 2019/11/05 01:10:13 : 6148 : .DS_Store
1: >++ : 2019/11/02 19:09:34 : 5122 : MEDIAPRO.XML
2: <-- : 2019/07/01 19:07:35 : 2595 : MEDIAPRO.XML
1: >== : 2019/11/02 19:09:34 : 7 : STATUS.BIN
2: <== : 2019/07/01 19:07:35 : 7 : STATUS.BIN
###-----------------< M4ROOT/CLIP >--------------------
1: ./data0/M4ROOT/CLIP
2: ./data1/M4ROOT/CLIP
### File lists: ---
1: === : 2019/02/09 14:53:23 : 1878686635 : C0001.MP4
2: === : 2019/02/09 14:53:23 : 1878686635 : C0001.MP4
1: === : 2019/02/09 14:53:23 : 2008 : C0001M01.XML
2: === : 2019/02/09 14:53:23 : 2008 : C0001M01.XML
(Omis à mi-chemin)
1: === : 2019/07/01 19:07:35 : 7627022896 : C0006.MP4
2: === : 2019/07/01 19:07:35 : 7627022896 : C0006.MP4
1: === : 2019/07/01 19:07:35 : 2009 : C0006M01.XML
2: === : 2019/07/01 19:07:35 : 2009 : C0006M01.XML
1: : 2019/07/28 14:15:53 : 15709053750 : C0007.MP4
2: ! : ~~
1: : 2019/07/28 14:15:53 : 2008 : C0007M01.XML
2: ! : ~~
(Ce qui suit est omis)
Si vous avez un grand nombre de répertoires et de fichiers à comparer, vous pouvez facilement trouver les fichiers en double en filtrant avec `./cmp_dirtree ./data0 ./data1 | grep -e '. ==' ' ..