Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/01/2010, à 00:39

omnimax

cherche logiciel de doublon spécial

Bonsoir,

je cherche un logiciel permettant de me dire dans un ou plusieurs dossiers quels sont les fichiers qui ont le même nom.

par exemple j'ai une image1.jpg représentant un ballon dans dossier 1 et puis plus tard je sauve une autre image1.jpg  dans un autre sous-dossier2 mais représentant elle une vache ; j'aimerai avoir une liste me disant attention image1.jpg dans dossier1 différente de image1.jpg dans dossier2.

j'ai essayé fslint, kleansweep mais aucun ne propose cette fonction.

si vous connaissez un programme en ligne de commande, je préfère.

Grand merci.

Dernière modification par greg2007 (Le 28/01/2010, à 21:24)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#2 Le 28/01/2010, à 01:07

mika

Re : cherche logiciel de doublon spécial

Ben là, je pense qu'il faudrait un script bash par exemple...

1) d'abord à base de find pour lister les fichiers,
2) ensuite faire un test sur chaque fichier avec compare.

Surement faisable  en python, ruby ou autre.

EDIT :
fdupes peut remplacer find, c'est un outil spécialisé dans la recherche des fichiers en double qui me semble plus souple. Voila donc de bonnes bases pour un futur script.

Dernière modification par mika (Le 28/01/2010, à 01:13)


Pinard m'a tueR (in vino veritas ?)
Cherche logiciel pour tagger ses vinyles.

Hors ligne

#3 Le 28/01/2010, à 01:15

nesthib

Re : cherche logiciel de doublon spécial

un programme tout spécialement fait pour ça → bash

tu peux par exemple chercher les fichiers dont le nom est en double dans les sous répertoires de ton dossier d'intérêt puis les comparer

une piste pour trouver les fichiers en double

FOLDER="/home"
ls -R1 "$FOLDER" | sort | uniq -c | sed '/^ *1/d;s/^ *[0-9]* //' | while read line
do
   echo ">$line"
   find "$FOLDER" -name "$line"
done

vite fait à améliorer

edit : bon ok c'est vrai fdupes fait ça très bien (mais n'est pas installé par défaut tongue)

Dernière modification par nesthib (Le 28/01/2010, à 01:17)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#4 Le 28/01/2010, à 01:20

mika

Re : cherche logiciel de doublon spécial

Rectification, fdupes est encore plus puissant : il devrait te suffire amplement. Pour chaque fichier en double, il vérifie la taille, la signature md5 et, enfin, fait une comparaison byte par byte.

Quasi aucune chance que deux images de même nom aient tout ça en commun.

Dernière modification par mika (Le 28/01/2010, à 01:21)


Pinard m'a tueR (in vino veritas ?)
Cherche logiciel pour tagger ses vinyles.

Hors ligne

#5 Le 28/01/2010, à 01:28

mika

Re : cherche logiciel de doublon spécial

nesthib a écrit :

...

edit : bon ok c'est vrai fdupes fait ça très bien (mais n'est pas installé par défaut tongue)

Rohhhhhhh smile Je pense pas qu'il soit à un apt-get install prêt.


Pinard m'a tueR (in vino veritas ?)
Cherche logiciel pour tagger ses vinyles.

Hors ligne

#6 Le 28/01/2010, à 08:52

nesthib

Re : cherche logiciel de doublon spécial

mika a écrit :

Rohhhhhhh smile Je pense pas qu'il soit à un apt-get install prêt.

c'était juste de la mauvaise foi pour ne pas avoir pensé à fdupes wink


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 28/01/2010, à 09:41

omnimax

Re : cherche logiciel de doublon spécial

Merci pour vos réponses. Le hic fdupes ne fonctionne pas chez moi

ex : fdupes -r ~/Images/

ne me retourne rien alors que j'ai

~/Images/10.jpg
~/Images/nouveaudossier/10.jpg (où j'ai pris 04.jpg que j'ai renommé expressément en 10.jpg)

et donc il ne me retourne rien ...j'aimerai qu'il me dise que deux  10.jpg sont différents.

Dernière modification par greg2007 (Le 28/01/2010, à 09:42)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#8 Le 28/01/2010, à 10:03

sergeG75018

Re : cherche logiciel de doublon spécial

tu as vraiment beaucoup de fichiers à trier? Parce que la fonction
recherche>trier par nom>.jpg + tes yeux
est une solution simple.


Ironie, sarcasme ou cynisme? Je ne sais plus

Hors ligne

#9 Le 28/01/2010, à 10:13

mika

Re : cherche logiciel de doublon spécial

greg2007 a écrit :

Merci pour vos réponses. Le hic fdupes ne fonctionne pas chez moi

ex : fdupes -r ~/Images/

ne me retourne rien alors que j'ai

~/Images/10.jpg
~/Images/nouveaudossier/10.jpg (où j'ai pris 04.jpg que j'ai renommé expressément en 10.jpg)

et donc il ne me retourne rien ...j'aimerai qu'il me dise que deux  10.jpg sont différents.

Il ne te retourne rien par ce qu'il sait que ces deux fichiers sont différents. Si c'est ce que tu recherches, repars donc sur l'idée d'un script bash avec find et compare.


Pinard m'a tueR (in vino veritas ?)
Cherche logiciel pour tagger ses vinyles.

Hors ligne

#10 Le 28/01/2010, à 21:07

omnimax

Re : cherche logiciel de doublon spécial

ok grand merci à tous.

j'ai mis tout ça en boite au cas ça peut servir à quelqu'un.

#!/bin/bash
################################################################
################################################################
#script pour trouver les doubons
#variables du chemin $path1

path1=$(zenity --file-selection --directory --title="Sélectionnez le dossier cible")
[ "$?" = "1" ] && exit

# selection des fichiers en double
cd /"$path1"
doublon=$(ls -R1 | sort | uniq -c | sed '/^ *1/d;s/^ *[0-9]* //')
  
# recherche du chemin absolu des fichiers en double grâce au nom de fichier
for i in $doublon
do
  find "/$path1" -name "$i" 
  
done

exit 0

14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#11 Le 28/01/2010, à 23:24

nesthib

Re : cherche logiciel de doublon spécial

Tu as testé ? Je ne suis pas convaincu que ça fonctionne avec une boucle for. Utilise plutôt un while read comme dans mon exemple.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#12 Le 28/01/2010, à 23:43

mika

Re : cherche logiciel de doublon spécial

Pareil ça me parait plus propre, genre

while read line; 
  do find $var1 -name $var2
 ...
done
...

Pinard m'a tueR (in vino veritas ?)
Cherche logiciel pour tagger ses vinyles.

Hors ligne

#13 Le 29/01/2010, à 01:26

snapshot

Re : cherche logiciel de doublon spécial

+1

utilises le while. Le for a de nombreux inconvénients :
- il plantera si un fichier contient un espace
- il plantera si la liste est longue (supérieur à 32 Ko)
- il faudra attendre la lecture du dernier fichier pour commencer le traitement du premier

Plutot que sed, je préfère awk ! Chacun son truc tongue

Utilise le while de cette manière, ce qui éliminera tous les défauts de for  :

ls -R1 | sort | uniq -c | awk '$1>1 {print $2}' | while read doublon
do 
  find "$path1" -name "$doublon"
  ...
done

Attention au piège dans ce genre de construction : while ls -R1 | ... | read doublon ne marche pas !

Tu peux cependant écrire ceci :

while read doublon
do 
  find "$path1" -name "$doublon"
  ...
done < <(ls -R1 | sort | uniq -c | awk '$1>1 {print $2}')

Dernière modification par snapshot (Le 29/01/2010, à 01:27)


Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !

Hors ligne

#14 Le 29/01/2010, à 10:46

omnimax

Re : cherche logiciel de doublon spécial

ok je savais pas pour le for (avantages /inconvénients)

par contre au niveau des noms avec espaces, ton exemple ne fonctionne pas non plus avec les noms munis d'un espace? et j'avoue les sed et awk c'est pas trop ma tasse de thé big_smile


#!/bin/bash
################################################################
################################################################
#script pour trouver les doubons
#variables du chemin $path1

path1=$(zenity --file-selection --directory --title="Sélectionnez le dossier cible")
[ "$?" = "1" ] && exit

# selection des fichiers en double
cd /"$path1"

 while read doublon
do 
  find "$path1" -name "$doublon"
  
done < <(ls -R1 | sort | uniq -c | awk '$1>1 {print $2}') 

exit 0

qui plus est je comprends pas trop cette syntaxe ...pourquoi à la fin après le done et ces deux symboles <<

done < <(ls -R1 | sort | uniq -c | awk '$1>1 {print $2}')

Dernière modification par greg2007 (Le 29/01/2010, à 10:48)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#15 Le 29/01/2010, à 13:37

nesthib

Re : cherche logiciel de doublon spécial

@snapshot : awk est très bien mais attention ici tu n'affiches que la deuxième colonne (soit le premier mot pour un nom de fichier avec des espaces)

awk '$1>1 {$1="" ; print $0}')

serait mieux (et encore tu te retrouves avec un espace indésirable. Sinon il faut faire une boucle pour afficher de la colonne 2 à la dernière)

@greg2007 : cette syntaxe est un opérateur de redirection de bash
< : permet de mettre en entrée un fichier
<<< : idem pour une variable ou un texte
< <(…) : idem pour le résultat d'une commande


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#16 Le 29/01/2010, à 14:26

snapshot

Re : cherche logiciel de doublon spécial

exact pour awk ! le shell c'est puissant mais plein de pièges !

La syntaxe <(...) est l'une de mes préférées du shell. Je l'appelle "la fichiérisation" de processus (oui, je sais, c'est un assez vilain mot, mais j'aime nommer les concepts).

La commande suivante (attention, ce n'est pas << mais < <(...) : il y a un espace)

done < <(ls -R1 | sort | uniq -c | awk '$1>1 {print $2}')

sera substituée par le shell en :

done < /un/fichier/temporaire

qui n'est en fait pas un fichier mais un pipe que le shell alimente automatiquement par le résultat de (ls -R1 | sort | uniq -c | awk '$1>1 {print $1=""; print $0}').

Elle permet d'avoir plusieurs pipes dans une commande ou d'utiliser un pipe autrement que pour l'entrée standard, en argument. J'utilise par exemple la commande suivante, pour comparer deux fichiers sur deux serveurs :

diff <(ssh serv1.example.com cat /etc/my.cnf) <(ssh serv2.example.com cat /etc/my.cnf)

Elle simplifie énormément la création des pipes, processus et fichier temporaires


Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !

Hors ligne

#17 Le 29/01/2010, à 15:45

omnimax

Re : cherche logiciel de doublon spécial

oui j'avais compris plus ou moins "la fonction pipe" mais ce que je ne comprends pas c'est que

on dit lorsque tu lis doublon (while read...) fait une recherche de doublon dans le path1
puis on lui indique terminé (done) et là tout d'un coup on redirige vers une variable???

dans l'odre logique c'est plutôt perturbant

en français jaurais préféré lorsque tu trouve un doublon grâce à (ls -R1 | sort | uniq -c | awk '$1>1 {print $2}') alors fait une recherche du doublon dans le path....


vous comprenez ???:/


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#18 Le 29/01/2010, à 15:47

mika

Re : cherche logiciel de doublon spécial

snapshot a écrit :

exact pour awk ! le shell c'est puissant mais plein de pièges !

La syntaxe <(...) est l'une de mes préférées du shell. Je l'appelle "la fichiérisation" de processus (oui, je sais, c'est un assez vilain mot, mais j'aime nommer les concepts)....

J'adore... Par contre c'est dur à dire smile


Pinard m'a tueR (in vino veritas ?)
Cherche logiciel pour tagger ses vinyles.

Hors ligne

#19 Le 29/01/2010, à 15:49

omnimax

Re : cherche logiciel de doublon spécial

ou alors en gros c'est moi qui ait pas capté

votre fonction while read ...... > > c'est plus au moins le même princippe que


doublon =$(while....done)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#20 Le 29/01/2010, à 18:24

snapshot

Re : cherche logiciel de doublon spécial

pas vraiment... la syntaxe $(...) charge tout en mémoire, et perd des informations en traitant de la même façon espaces et fin de ligne. S'il y a beacoup de lignes (plus que 32Ko, ça ne passe plus). En plus, il faut attendre d'avoir lu la dernière ligne pour continuer le script.

Les syntaxes utilisant les pipes sont meilleurs, car les éléments sont traités les uns après les autres, et restent séparés par les fins de ligne.

Il suffit de comparer :

for fichier in $(echo xxxx; echo un fichier; echo un autre fichier)
do 
  echo "$fichier"
done

avec :

while read fichier
do 
  echo "$fichier"
done < <(echo xxxx; echo un fichier; echo un autre fichier)

ou (principe équivalent, mais écrit différemment)

echo xxxx; echo un fichier; echo un autre fichier | while read fichier
do 
  echo "$fichier"
done

Quant à mettre le <(..) vers le done, c'est en fait très logique : la redirection porte sur l'ensemble de la boucle, incluant le read, même si celui-ci figure en haut. Il ne faut pas  écouter son intution en mettant while read < fichier, car dans ce cas, on ré-initialise la lecture du fichier à chaque parcourt de boucle. Résultat, on tombe dans une boucle infinie ne lisant à chaque fois que la première ligne du fichier :

while read x < <(echo un; echo deux; echo trois)
do 
  echo $x
done

Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !

Hors ligne

#21 Le 29/01/2010, à 19:42

omnimax

Re : cherche logiciel de doublon spécial

Waouw super, j'adore les user comme toi qui prenne le temps d'apprendre aux autres smile


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#22 Le 29/01/2010, à 19:44

nesthib

Re : cherche logiciel de doublon spécial

@snapshot : je ne l'aurai pas mieux expliqué wink

juste une petite image pour différencier le fait de stocker une variable ou de passer par un flux de données (pipe). Pour chercher un mot dans un annuaire 2 possibilités :
- tu lis tout l'annuaire et ensuite tu te demandes quel est le nom correspondant
- tu lis ligne à ligne jusqu'au moment où tu trouve le nom qui t'intéresse
(l'image est un peu fausse mais c'est en gros le concept)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#23 Le 29/01/2010, à 19:44

omnimax

Re : cherche logiciel de doublon spécial

Waouw super, j'adore les user comme toi qui prenne le temps d'apprendre aux autres smile


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#24 Le 29/01/2010, à 20:21

omnimax

Re : cherche logiciel de doublon spécial

petit souci en fait:

awk '$1>1 {$1="" ; print $0}'

affiche
    imagesendoubles.jpg

au lieu de
imagesendoubles.jpg

un espace devant empêche donc de trouver l'argument avec find sad
sait-on annuler l'espace en mettant un caractère disant pas de premier espace?

Dernière modification par greg2007 (Le 29/01/2010, à 20:22)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#25 Le 29/01/2010, à 20:31

nesthib

Re : cherche logiciel de doublon spécial

nesthib a écrit :

@snapshot : awk est très bien mais attention ici tu n'affiches que la deuxième colonne (soit le premier mot pour un nom de fichier avec des espaces)

awk '$1>1 {$1="" ; print $0}')

serait mieux (et encore tu te retrouves avec un espace indésirable. Sinon il faut faire une boucle pour afficher de la colonne 2 à la dernière)

utilise ma commande sed pour ne pas te prendre la tête


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne