Pesquisa por arquivos redundantes (idênticos)
Publicado por Marcio Gil (última atualização em 31/08/2010)
[ Hits: 4.727 ]
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
Screensaver Johnny Castaway - XFCE + Wine
KDE 4.1.1 no Slackware Linux 12.1
Nenhum coment�rio foi encontrado.
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Alguém já usou o framework Avalonia para desenvolver interfaces de usu... (2)
Gestão de Ambiente em uma rede Linux (3)