Trouver tous les dossiers d'un répertoire avec le même contenu


10

Dans Ubuntu, y en a-t-il pour trouver des dossiers en double dans un répertoire (c'est-à-dire des dossiers avec le même contenu)? Je pense qu'il existe déjà des outils de ligne de commande disponibles pour trouver des fichiers en double (tels que fdupes), mais je veux plutôt trouver des dossiers en double. Autrement dit, recherchez les dossiers qui correspondent en termes de contenu des fichiers qu'ils contiennent (bien que les noms de fichiers et autres métadonnées puissent différer).


Je pourrais commencer par générer une liste de tous les dossiers d'un répertoire (triés par longueur), puis vérifier chaque paire de dossiers de la même longueur.
Anderson Green

Définissez "dupliquer". Les fichiers à l'intérieur doivent-ils correspondre simplement au contenu du fichier? Nom de fichier? Numéro d'inode? Taille du fichier?
Chris Down

@ChrisDown La question a été mise à jour.
Anderson Green

3
Oui. Les répertoires ne sont en réalité que des fichiers, votre déclaration est donc ambiguë. Avoir le "même contenu" en réalité signifierait que les répertoires contiennent tous les deux les mêmes références d'inode. Il n'est pas clair si vous voulez dire cela, ou si vous voulez dire que les fichiers à l'intérieur doivent avoir le même contenu, et si oui, s'il y a d'autres stipulations (mtime, nom de fichier, etc.).
Chris Down

3
@ChrisDown Je veux dire que les fichiers à l'intérieur devraient avoir le même contenu.
Anderson Green

Réponses:


5
#!/bin/bash
shopt -s dotglob

for file in "$1"/*; do [[ -f "$file" ]] && d1+=( "$(md5sum < "$file")" ); done
for file in "$2"/*; do [[ -f "$file" ]] && d2+=( "$(md5sum < "$file")" ); done 

[[ "$(sort <<< "${d1[*]}")" == "$(sort <<< "${d2[*]}")" ]] && echo "Same" || echo "Different"

Vous pouvez le voir en action ici:

$ mkdir 1 2
$ ./comparedirs 1 2
Same
$ cat > 1/1 <<< foo
$ cat > 2/1 <<< foo
$ ./comparedirs 1 2
Same
$ cat > 2/1 <<< bar
$ ./comparedirs 1 2
Different

Puisque ce script n'a pas été testé, j'ai hâte de voir s'il fonctionne comme il est censé fonctionner.
Anderson Green

1
@AndersonGreen Vérifiez la réponse mise à jour, testez-la.
Chris Down

Agréable! Il devrait également y avoir un test avec cat > 1/2 <<< baret cat > 2/3 <<< bar pour afficher plusieurs fichiers et différentes métadonnées (== "Identique")
nealmcb

@ChrisDown: faut-il trier à la dernière étape?
harish.venkat

Script élégant, seul bogue mineur est qu'il renvoie la même chose lorsque l'un des répertoires ou les deux n'existent pas. Devrait être facilement réparable si l'on est meilleur en script que moi
cosinus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.