Pesquisa por arquivos redundantes (idênticos)
Publicado por Marcio Gil (última atualização em 31/08/2010)
[ Hits: 4.881 ]
Pesquisa por arquivos redundantes (idênticos).
Uso:
redund [opções] [diretório] [diretório2]
Opções:
-n, --name Pesquisa com o mesmo nome (não verifica o conteúdo)
-i, --ident Pesquisa por arquivos idênticos (nome e conteúdo iguais)
-t, --total Pesquisa completa (nome diferente, mesmo conteúdo)
-x "regex" Remover da pesquisa arquivos conforme a expressão regular
Se não especificados, a opção será -i e o diretório será "."
#!/bin/bash
#
# redund: Pesquisa por arquivos redundantes (idênticos)
#
CMD=`basename $0`
DIR1=""
DIR2=""
OPC="i"
XREGEX=""
HELP=0
while [ $# -gt 0 ]
do
case "$1" in
--help|-\?)
HELP=1
;;
--name|-n)
OPC="n"
;;
--ident|-i)
OPC="i"
;;
--total|-t)
OPC="t"
;;
-x)
shift
XREGEX="$1"
;;
-*)
echo "$CMD: opção inválida: $1" 1>&2
echo "Tente '$CMD --help' para mais informações" 1>&2
exit 1
;;
*)
if [ "$DIR1" == "" ] ; then
DIR1="$1"
if [ ! -d "$DIR1" ] ; then
if [ -e "$DIR1" ] ; then
echo "$CMD: não é um diretório: $1" 1>&2
else
echo "$CMD: diretório inexiste: $1" 1>&2
fi
exit 1
fi
elif [ "$DIR2" == "" ] ; then
DIR2="$1"
if [ ! -d "$DIR2" ] ; then
if [ -e "$DIR2" ] ; then
echo "$CMD: não é um diretório: $1" 1>&2
else
echo "$CMD: diretório inexiste: $1" 1>&2
fi
exit 1
fi
else
echo "$CMD: excesso de parâmetros: $1" 1>&2
echo "Tente '$CMD --help' para mais informações" 1>&2
exit 1
fi
;;
esac
shift
done
if (( $HELP )) ; then
echo "Pesquisa por arquivos redundantes (idênticos)."
echo
echo "Uso:"
echo " $CMD [opções] [diretório] [diretório2]"
echo
echo "Opções:"
echo " -n, --name Pesquisa com o mesmo nome (não verifica o conteúdo)"
echo " -i, --ident Pesquisa por arquivos idênticos (nome e conteúdo iguais)"
echo " -t, --total Pesquisa completa (nome diferente, mesmo conteúdo)"
echo " -x \"regex\" Remover da pesquisa arquivos conforme a expressão regular"
echo
echo "Se não especificados, a opção será -i e o diretório será \".\""
echo
exit 0
fi
if [ "$DIR1" == "" ] ; then
DIR1="."
fi
echo -ne '...\r' 1>&2
if [ "$XREGEX" == "" ] ; then
if [ "$DIR2" == "" -o "$DIR2" == "$DIR1" ] ; then
FILES=( $(find $DIR1 -type f -printf '%f:%h\n' | sort \
| sed "s/\([^:]*\):\(.*\)/$'\2\/\1'/;s/ /\\\{FONTE}40/g") )
else
FILES=( $( ( find $DIR1 -type f -printf '%f:%h\n' \
&& find $DIR2 -type f -printf '%f:%h\n' ) | sort \
| sed "s/\([^:]*\):\(.*\)/$'\2\/\1'/;s/ /\\\{FONTE}40/g") )
fi
else
if [ "$DIR2" == "" -o "$DIR2" == "$DIR1" ] ; then
FILES=( $(find $DIR1 -type f -printf '%f:%h\n' | grep -v "$XREGEX" | sort \
| sed "s/\([^:]*\):\(.*\)/$'\2\/\1'/;s/ /\\\{FONTE}40/g") )
else
FILES=( $( ( find $DIR1 -type f -printf '%f:%h\n' \
&& find $DIR2 -type f -printf '%f:%h\n' ) | grep -v "$XREGEX" | sort \
| sed "s/\([^:]*\):\(.*\)/$'\2\/\1'/;s/ /\\\{FONTE}40/g") )
fi
fi
NF=${#FILES[*]}
if [ "$OPC" == "t" ] ; then
NI=$(( ($NF + 1) * $NF / 2 ))
else
NI=$NF
fi
if (( $NI > 250 )) ; then
PERC=1
echo -ne '0 %\r' 1>&2
else
PERC=0
fi
K=0
N=0
for (( I = 0 ; I < NF ; I++ )) ; do
FILE_I=`eval "echo ${FILES[$I]}"`
for (( J = I + 1 ; J < NF ; J++ )) ; do
FILE_J=`eval "echo ${FILES[$J]}"`
if [ "$OPC" == "t" -o "${FILE_I##*/}" == "${FILE_J##*/}" ] ; then
if [ "$OPC" == "n" ] || diff -q "$FILE_I" "$FILE_J" >/dev/null ; then
echo "$FILE_I" "$FILE_J"
(( N++ ))
fi
else
if [ "$OPC" == "n" ] ; then
(( I = J - 1 ))
fi
break
fi
(( K++ ))
done
if (( $PERC )) ; then
if [ "$OPC" == "t" ] ; then
echo -ne $(( $K * 100 / $NI ))' %\r' 1>&2
else
echo -ne $(( $I * 100 / $NF ))' %\r' 1>&2
fi
fi
done
if (( $PERC )) ; then
echo -ne ' \r' 1>&2
fi
exit $N
Pré Configuração do SQuiD Slackware
Shell Script: Script para a instalação do pureftpd
Download automático da 'Imagem do Dia' da NASA
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático
Como impedir exclusão de arquivos por outros usuários no (Linux)
Alguém executou um rm e quase mata a Pixar! (6)
Formas seguras de instalar Debian Sid (9)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (12)
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (5)
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (6)









