Utilizando La Orden Find Y Perl
Modo de invocación
find . -type f -exec sha1sum '{}' \; | perl script.plFichero auxiliar, guárdese como script.pl, asegúrate de pasar la la dirección absoluta de este archivo a Perl.
use strict; my %hsh = (); while(<STDIN>) { /^([a-f0-9]+)\s+(.+)$/; print "$2\n"; if( not $hsh{$1}) { @{$hsh{$1}} = ($2); } else { push @{$hsh{$1}}, $2 } } print "\n\nDuplicates!\n\n"; for(keys %hsh) { next if(@{$hsh{$_}}==1); print(join("\n -> ", @{$hsh{$_}})); print "\n"; }Utilizando La Orden Find Y AWK
Modo de invocacion
find . -type f -exec sha1sum '{}' \; | awk -f script.awkFichero auxiliar, guárdese como script.awk, asegúrate de pasar la la dirección absoluta de este archivo a AWK.
{ path = substr($0, 41) print path if(!array[$1]) { array[$1]= path next } array[$1] = (array[$1] "\n ->" path) duplicates[$1] = 1 } END { if(!length(duplicates)) exit print "\n\nDuplicates!\n\n" for(key in duplicates) print array[key] "\n\n" }Script Para Bash
Bueno, realmente considero que es un poco más práctico tener un script al que podamos invocar con argumentos, para esto seria conveniente incluir dentro de el script de Bash el script para Perl, y con la opción -e pasar a Perl el programa como una cadena en vez de un fichero. Por motivos de brevedad, estaré utilizando la forma que he venido utilizando en toda la entrada.
#!/bin/bash # By default, the current working directory is used. DIR=$PWD if [[ -n $1 ]]; then DIR=$1 fi find $DIR -type f -exec sha1sum '{}' \; | perl script.pl
No hay comentarios:
Publicar un comentario