Pesquisa por arquivos redundantes (idênticos)
Publicado por Marcio Gil (última atualização em 31/08/2010)
[ Hits: 4.778 ]
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
Update VirtualBox Extension Pack
pdfcon - leitor de PDF em modo texto
Interface gráfica para nível de tinta (escputil) em shell script
Desligando o computador quando acabarem as músicas na sua lista de reprodução do MPD
Instalação Android Studio no Linux
Nenhum comentário foi encontrado.
Intel corta Vulkan do oneAPI Construction Kit 5.0
Kernel 6.18 em foco, betas fervilhando e avanços em IA no Linux
O que é o THP na configuração de RAM do Linux e quando desabilitá-lo
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Adicionando o repositório backports no Debian 13 Trixie
Como definir um IP estático no Linux Debian
intervenção politica pode interver no Fedora Linux [RESOLVIDO] (10)
Primeiras impressões do Debian 13 (24)
Fedora não reconhece James Donkey 102 Wireless Gaming Mouse (1)