#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 )
Dernière modification par nesthib (Le 28/01/2010, à 01:17)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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
...
edit : bon ok c'est vrai fdupes fait ça très bien (mais n'est pas installé par défaut )
Rohhhhhhh 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
Rohhhhhhh 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
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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
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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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
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é
#!/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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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
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
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
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é
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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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
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
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
@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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne