J'ai téléchargé beaucoup d'images dans un répertoire.
Downloader a renommé des fichiers qui existent déjà.
J'ai également renommé certains fichiers manuellement.
a.jpg
b.jpg
b(2).jpg
hello.jpg <-- manually renamed `b(3).jpg`
c.jpg
c(2).jpg
world.jpg <-- manually renamed `d.jpg`
d(2).jpg
d(3).jpg
Comment supprimer les doublons? Le résultat devrait être:
a.jpg
b.jpg
c.jpg
world.jpg
note: le nom n'a pas d'importance. Je veux juste des fichiers uniq.
echo cksm
juste après la ligne commençant parread
si vous voulez voir le hachage de chaque fichier.**
, il ordonne la liste de manière à ce que les deux dossiers soient entrelacés plutôt que tout le dossier 1 puis tout le dossier 2. Le script laissera toujours le premier `` original '' il frappe pendant qu'il parcourt la liste. Vous pouvezecho $file
avant laread
ligne pour voir si cela est vrai.fdupes est l'outil de votre choix. Pour rechercher tous les fichiers en double (par contenu, pas par nom) dans le répertoire actuel:
Pour confirmer manuellement la suppression des fichiers dupliqués:
Pour supprimer automatiquement toutes les copies sauf la première de chaque fichier dupliqué ( soyez averti, cet avertissement, cela supprime en fait les fichiers, comme demandé ):
Je recommande de vérifier manuellement les fichiers avant la suppression:
la source
-d '\n'
fdupes -rdN .
où -r est récursif, -d est supprimer et -N est sans inviteVous pouvez essayer FSLint . Il a à la fois une ligne de commande et une interface graphique .
la source
Étant un peu paresseux, il ne m'a pas fallu longtemps pour en trouver un en ligne .
Vous devez d'abord créer une somme de contrôle CRC de chaque fichier, car vous ne voulez évidemment supprimer que les doublons exacts.
Ensuite, parcourez cette liste de fichiers, en lisant la somme de contrôle et également le nom de fichier. Si deux sommes de contrôle sont identiques, le fichier sera supprimé. Cela fonctionne, car le tri est numérique et ne trie que les sommes de contrôle, qui regroupent les fichiers en double.
De toute évidence, cela ne fonctionne pas récursivement.
la source
Comment tester des fichiers ayant un contenu unique?
Comment obtenir la liste des fichiers dans le répertoire?
Nous pouvons obtenir 2 fichiers de cette liste et vérifier si leurs noms sont différents et leur contenu identique.
Par exemple, nous avons un dir:
Il n'y a donc que 3 fichiers uniques.
Permet d'exécuter ce script:
Et nous obtenons seulement 3 fichiers sortis.
la source
J'ai écrit ce petit script pour supprimer les fichiers dupliqués
https://gist.github.com/crodas/d16a16c2474602ad725b
Fondamentalement, il utilise un fichier temporaire (
/tmp/list.txt
) pour créer une carte des fichiers et leurs hachages. Plus tard, j'utilise ces fichiers et la magie des tuyaux Unix pour faire le reste.Le script ne supprimera rien mais imprimera les commandes pour supprimer les fichiers.
mfilter.sh ./dir | bash
J'espère que ça aide
la source
Version plus concise de la suppression des fichiers en double (une seule ligne)
find_same_size.sh
la source
J'ai trouvé un moyen plus simple d'effectuer la même tâche
la source
La plupart et peut-être toutes les réponses restantes sont terriblement inefficaces en calculant la somme de contrôle de chaque fichier du répertoire à traiter.
Une approche potentiellement plus rapide de l'ordre de grandeur consiste à obtenir d'abord la taille de chaque fichier, qui est presque immédiate (
ls
oustat
), puis à calculer et à comparer les sommes de contrôle uniquement pour les fichiers ayant une taille non unique.la source
Ce n'est pas ce que vous demandez, mais je pense que quelqu'un pourrait le trouver utile lorsque les sommes de contrôle ne sont pas les mêmes, mais le nom est similaire (avec le suffixe entre parenthèses). Ce script supprime les fichiers avec des suffixes comme ("chiffre")
la source
J'ai trouvé un petit programme qui simplifie vraiment ce genre de tâches: fdupes .
la source