elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [MOD] código de bash computingSize()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [MOD] código de bash computingSize()  (Leído 3,267 veces)
Pitagoras

Desconectado Desconectado

Mensajes: 29


Ver Perfil
[MOD] código de bash computingSize()
« en: 25 Octubre 2022, 18:47 pm »

Buenas, necesito ayuda URGENTE en un código de bash que he realizado, mi duda es en la función computingSize() del código que paso a continuación ya que la función debe de calcular el tamaño en bytes o KBytes Recorriendo de forma recursiva los ficheros regulares y subdirectorios, evaluando las opciones especificadas, haciendo la función del comando du (ejemplo: du -d 0 --exclude=PATRON /RUTA).

CÓDIGO:
Código:
#!/bin/bash
shopt -s dotglob #recuperar ocultos

##################################muestra error y fuerza salida#####################################
function mostrarError () {
    echo "ERROR. Modo de empleo: midu [opciones] [camino1 camino2 caminos3 ...]"
    exit 1
}

########################################Funcion recursiva###########################################
tam_parcial=0 #variable global

function computingSize(){
    #Guardamos las opciones en variables locales
    local opcion_d
    local opcion_s  
    local opcion_exlude
    local ruta=$4

    #si el camino es un archivo regular la unica opcion a tener en cuenta es --exclude
    if [ -f $ruta ]; then
        #se calcula el tamano (aux). Vale tambien con wc -c (tamano en bytes es valido)
        #stat con opciones adecuadas o en KB con ls -s
        tam_parcial=$aux
    fi

    #si el camino es un directorio
    if [-d $ruta]; then
        local nodo
        #lista todo lo que tiene la ruta archivos y directorios "ls" y los va ha recorrer uno a uno por nodo
        for nodo in $ruta/*; do
            #si es directorio
            if [-d $nodo]; then

                #Guardar el valor de tam_parcial en variable local (e.j: temp)
                temp=$tam_parcial
                #resetear antes de la llamada a funcion recursiva
                tam_parcial=0

                computingSize $opcion_d $opcion_s $opcion_exlude $nodo
                #imprimir $tam_parcial
                print(tam_parcial)

                #se recupera/restaura el valor anterior de tam_parcial y se acumula con lo obtenido
                #en la llamada recursiva
                tam_parcial <- $(expr $tam_parcial + $temp)

            #si es archivo regular
            elif [-f $nodo]; then
                #Calculando con wc -c
                tam_archivo

                #acumulamos
                tam_parcial=$(expr $tam_parcial + $tam_archivo)

            
            fi
        done
    fi
}

############################Comprobacion de errores#########################################
OPCION=""
CONTADOR=1 #Empezamos en el argumento 1
OPCION_D=99999;
OPCION_S=99999;
OPCION_EXCLU=99999;
for i in $@ ; do
    case $i in
         "-s" | "-d" | "--exclude")
                #Error si ya se ha recogido uno o mas caminos
                if [ $RUTAS ] ; then
                    mostrarError
                fi
                case $i in
                    "-d" | "--exclude")
                        #Error si -d o --exclude es el utimo param (y no tienen ningun valor detras)
                        if[$CONTADOR -eq $#]; then
                            mostrarError
                        fi
                        OPCION=$i
                        ;;
                    "-s")
                        #La opcion -s no tiene ningun param detras (Ruta)
                        OPCION_S=1
                        ;;
                    esac
                ;;
          *)
                ##Recuperamos los parametros para la opcion y/o la ruta##                      
                case $OPCION in
                    #Deberia recoger ahora el param de -d
                    "-d")
                        NIVELES=`expr $i / 1` #Paso a entero
                        #Si no hay niveles
                        if [ ! $NIVELES ] ; then
                            mostrarError
                        fi
                        #si los niveles son negativos
                        if [ $NIVELES -lt 0 ] ; then
                            mostrarError
                        fi
                        OPCION_D=$NIVELES                                                      
                        ;;                    

                    #Param de --exclude
                    "--exclude")
                        OPCION_EXCLU=$i                        
                        ;;

                    "") #Para recoger el camino. $i representa un camino dse anade al array vector                      
                        RUTAS+=("$i")
                        ;;
                esac
                #resetea al coger la opcion adecuada
                OPCION=""
                ;;            
    esac
    CONTADOR=$(expr $CONTADOR + 1)
done

#####################################################################
# Tratar cuando no se especifica camino
if [ ! $RUTAS ] ; then
     computingSize $OPCION_D $OPCION_S $OPCION_EXCLU "."
else
    for i in "${RUTAS[@]}"; do
        # Llamar a computingSize
        computingSize $OPCION_D $OPCION_S $OPCION_EXCLU $i
    done
fi


« Última modificación: 27 Octubre 2022, 12:18 pm por el-brujo » En línea

Pitagoras

Desconectado Desconectado

Mensajes: 29


Ver Perfil
URGENTE PORFAVOR!!
« Respuesta #1 en: 31 Octubre 2022, 18:14 pm »

Buenas, necesito ayuda URGENTE en un código de bash que he realizado, mi duda es en la función computingSize() del código que paso a continuación ya que la función debe de calcular el tamaño en bytes o KBytes Recorriendo de forma recursiva los ficheros regulares y subdirectorios, evaluando las opciones especificadas, haciendo la función del comando du (ejemplo: du -d 0 --exclude=PATRON /RUTA).

CÓDIGO:
Código:
#!/bin/bash
shopt -s dotglob #recuperar ocultos
[b]
function computingSize(){
    #Guardamos las opciones en variables locales
    local opcion_d
    local opcion_s  
    local opcion_exlude
    local ruta=$4

    #si el camino es un archivo regular la unica opcion a tener en cuenta es --exclude
    if [ -f $ruta ]; then
        #se calcula el tamano (aux). Vale tambien con wc -c (tamano en bytes es valido)
        #stat con opciones adecuadas o en KB con ls -s
        tam_parcial=$aux
    fi

    #si el camino es un directorio
    if [-d $ruta]; then
        local nodo
        #lista todo lo que tiene la ruta archivos y directorios "ls" y los va ha recorrer uno a uno por nodo
        for nodo in $ruta/*; do
            #si es directorio
            if [-d $nodo]; then

                #Guardar el valor de tam_parcial en variable local (e.j: temp)
                temp=$tam_parcial
                #resetear antes de la llamada a funcion recursiva
                tam_parcial=0

                computingSize $opcion_d $opcion_s $opcion_exlude $nodo
                #imprimir $tam_parcial
                print(tam_parcial)

                #se recupera/restaura el valor anterior de tam_parcial y se acumula con lo obtenido
                #en la llamada recursiva
                tam_parcial <- $(expr $tam_parcial + $temp)

            #si es archivo regular
            elif [-f $nodo]; then
                #Calculando con wc -c
                tam_archivo

                #acumulamos
                tam_parcial=$(expr $tam_parcial + $tam_archivo)

            
            fi
        done
    fi
}
[/b]


« Última modificación: 31 Octubre 2022, 18:16 pm por Pitagoras » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA urgente, porfavor
Hacking
gerard_88 0 2,695 Último mensaje 27 Abril 2010, 21:33 pm
por gerard_88
ayuda porfavor es urgente « 1 2 »
Programación C/C++
firius2010 13 6,476 Último mensaje 23 Marzo 2012, 09:35 am
por Xandrete
Ayuda porfavor (urgente)
Bases de Datos
J_kaos 0 1,700 Último mensaje 16 Mayo 2012, 23:31 pm
por J_kaos
Urgente.. pORFAVOR
Programación C/C++
nosotros12 6 2,309 Último mensaje 16 Septiembre 2014, 11:21 am
por Eternal Idol
SOCKETS AYUDA URGENTE PORFAVOR!!!!
Java
Pitagoras 4 3,076 Último mensaje 9 Mayo 2022, 12:10 pm
por Pitagoras
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines