![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Système Vos questions autour de l'administration système |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité de passage
![]() Date d'inscription: août 2008
Messages: 3
|
Bonjour a tous,
C'est mon premier post!! Je suis sous unix(solaris) depuis peu de temps, j'ai plus de 14000 fichiers dans un dossier et je désirerai trouver les doublons dans ces fichiers à l'aide d'une commande dans mon terminal mais je n'y arrive pas... Pour certain cela doit paraitre facile mais pour moi la... je sèche ^^ Quelqu'un peut'il m'aider? Merci d'avance... |
|
|
|
|
|
#2 (permalink) |
|
Membre Expert
![]() Date d'inscription: juillet 2006
Localisation: toulouse
Messages: 1 474
|
tu veux comparer tous les fichiers avec tous les autres?
le mieux est de faire une commande décomposée. pour tout fichier --- charger la taille --- pour tout fichier de taille identique sauf lui même ------ commande diff ------ si identique prévenir --- fin boucle fin boucle Code :
[root@SINAGIOSS50 scripts]# for i in * ; do (taill=$(ls -lrt $i | awk '{print $5}'); echo $i $taill ;for j in $(ls -lrt | grep $taill | grep -v $i |awk '{print $9}') ; do echo $j ; diff $i $j > /dev/null ; if [ $? -eq 0 ] ; then echo "\n*******fichier $i $j $taill identiques\n******** " ; echo $i -- $j ; fi; done ) ; done
Code :
migration_bases_rrd_nagiosgraph_PNP.sh.old migration_bases_rrd_nagiosgraph_PNP.sh.new import_bases_rrd.sh removeramdisk.sh toto relance-applis.sh 726 removeramdisk.sh 150 toto \n*******fichier removeramdisk.sh toto 150 identiques\n********** removeramdisk.sh -- toto sauvegarde-a-froid.sh 1732 sauvegarde_bases_rrd.sh 1466 serviceextinfo.cfg.new 14712 supervision_ajout.sh 20248 |
|
|
|
|
|
#4 (permalink) |
|
Membre éclairé
![]() Date d'inscription: mars 2002
Localisation: Martigny, VS, CH
Âge: 23
Messages: 329
|
Salut,
Code :
$ man fdupes
FDUPES(1) FDUPES(1)
NAME
fdupes - finds duplicate files in a given set of directories
Code :
$ sudo aptitude install fdupes T.
__________________
Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/ |
|
|
|
|
|
#5 (permalink) |
|
Invité de passage
![]() Date d'inscription: août 2008
Messages: 3
|
En fait je désirerais chercher les doublons seulement sur les noms de fichier et non pas sur son contenu ou sa taille, désolé frp31 j'avait oublié de le préciser...
Juste pour vous dire je ne peut rien installer sur ce poste car je n'ai pas les droits admin (merci quand même tchetch ^^) Dernière modification par K-roT ; 28/08/2008 à 14h40 |
|
|
|
|
|
#6 (permalink) |
|
Membre Expert
![]() Date d'inscription: juillet 2006
Localisation: toulouse
Messages: 1 474
|
il ne peut pas exister de doublons de nom sur unix car il est case sensitive.
par contre tu peux avoir du tototiti et totottutu mais tu n'as que X caracteres communs.. voir les regexp pour selectionner avec un extrème précision les noms que tu veux chercher dans ton ls par exemple Code :
[root@sinagioss80 ~]# touch D5fdsfmt [root@sinagioss80 ~]# touch D5fdsfmtt [root@sinagioss80 ~]# touch D4fdsfmtt [root@sinagioss80 ~]# touch D4fdsfmt [root@sinagioss80 ~]# ls | grep "^D[1-4].*m." D4fdsfmt D4fdsfmtt [root@sinagioss80 ~]# ls | grep ^D D4fdsfmt D4fdsfmtt D5fdsfmt D5fdsfmtt signifie très exactement ^D commence par D majuscule [1-4] suivi d'un seul chiffre entre 1 & 4 .* suivi par un nombre quelconque de caracteres quelconques m suivi par un m minuscule . suivi par un seul caractère quelconque ce qui me selectionne bien que 2 fichiers sur les 4 crées...car seuls ces deux correspondent à ces critères. |
|
|
|
|
|
#7 (permalink) | |
|
Membre Expert
![]() Date d'inscription: juillet 2006
Localisation: toulouse
Messages: 1 474
|
Citation:
quand à ton messages d'erreur il faut adapter à l'environnement moi j'utilise du ksh ou bash selon les machines .... |
|
|
|
|
|
|
#8 (permalink) | |
|
Membre éclairé
![]() Date d'inscription: mars 2002
Localisation: Martigny, VS, CH
Âge: 23
Messages: 329
|
Citation:
Mais s'il peut servir, au moins je n'aurais pas perdu mon temps ... Fais attention, il prend la racine ('/') comme point de départ (un excès de confiance en soi de faire les tests sur la racine avec les droits root). Code perl :
#!/usr/bin/perl # use File::Find; use Digest::SHA1; use Fcntl ':mode'; use Data::Dumper; my %files = (); my %byUsers = (); @dirs = ('/'); find({ wanted => \&hashAndAdd, no_chdir => 1}, @dirs); sub hashAndAdd { my $f = $_; if(-f $f and ! -l $f) { ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($f); $o = open FILE, $f; if($o and $size > 0) { my $sha1 = Digest::SHA1->new; $sha1->addfile(FILE); $d = $sha1->hexdigest; $files{$d} = [] unless defined $files{$d}; ($name, $p, $u, $g, $q, $c, $gc, $home) = getpwuid $uid; %iUser = (name => $name, home => $home); %iFile = (file => $f, size => $size, user => { %iUser } ); $byUsers{$name} = [] unless defined $byUsers{$name}; push ( @{$files{$d}}, { %iFile }); push( @{$byUsers{$name}}, ref $files{$d}); } close FILE; } } print "RESULTS\n\n"; my $totSize = 0; my $fileFOUND = 0; foreach $k (keys %files) { if(($#{ $files{$k} } + 1) > 1) { print "FOR :: " . $k . " :: FOUND\n"; my $first = 0; foreach $a (@{ $files{$k} }) { $fileFOUND++; print " -> $a->{file} - $a->{size} - " . "$a->{user}{name} - $a->{user}{home}\n"; $totSize += $a->{size} unless $first eq 0; $first = 1; } } else { delete $files{$k}; } } $totSize = $totSize ; print "Total wasted size :: $totSize\n"; print "TOTAL FILES :: $fileFOUND\n"; 1;
__________________
Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/ |
|
|
|
|
![]() |
![]() |
||
Trouver Doublon dans un dossier
|
||
| Outils de la discussion | |
|
|