Problema con SCRIPT

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
martinp
Forista Nuevo
Forista Nuevo
Mensajes: 5
Registrado: Mar Nov 24, 2015 3:00 am

Problema con SCRIPT

Mensaje por martinp » Mar Nov 24, 2015 3:08 am

Buenas a todos!!

Básicamente me encuentro con un problema de la facultad en que me piden que haga esta función mi script:

-Desarrolle un script que periódicamente revise los archivos duplicados en un directorio (y subdirectorios) y envíe un mail a cada usuario con archivos duplicados, con el correspondiente listado de archivos sólo pertenecientes a él/ella, junto al espacio total que ocupan los archivos en cuestión. ¿Considera más apropiado el uso de cron ó anacron?

Esto eh hecho yo (me falta todavia :D) :

Código: Seleccionar todo

find $1 -mindepth 1 -type f -exec md5sum {} \; | sort | uniq -w33 -D |awk '{print $2}' |
while read line ; do
        if [[ -d "$1" ]] ; then
                ls -lh $line |awk '{print $3"\t\t"$5"\t\t"$9}'
        else
                echo -e "No existe el directorio."
        fi
done 
El problema esta en esta linea ls -lh $line |awk '{print $3"\t\t"$5"\t\t"$9}' ya que al haber archivos con espacio, al hacer un "ls" para saber a que usuario pertenece, me sale un erro que el fichero no existe.

Espero alguna ayudita o consejo.. Gracias! :D
Última edición por martinp el Mar Nov 24, 2015 3:53 pm, editado 2 veces en total.
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1807
Registrado: Dom Oct 10, 2004 7:00 am

Re: Problema con SCRIPT

Mensaje por neurus » Mar Nov 24, 2015 3:31 am

Encabeza el script con esta línea (obviamente luego de #!/bin/sh)

IFS=$'\x0A'$'\x0D'
martinp
Forista Nuevo
Forista Nuevo
Mensajes: 5
Registrado: Mar Nov 24, 2015 3:00 am

Re: Problema con SCRIPT

Mensaje por martinp » Mar Nov 24, 2015 3:54 pm

neurus escribió:Encabeza el script con esta línea (obviamente luego de #!/bin/sh)

IFS=$'\x0A'$'\x0D'

Sigo con el mismo problema, nose como solucionarlo =(

Error:

ls: no se puede acceder a /home/tincho/Descargas/ASA: No existe el archivo o el directorio
tincho 1,4M /home/tincho/Descargas/ASA.pdf
ls: no se puede acceder a /home/tincho/Descargas/Hola/ASA: No existe el archivo o el directorio
ls: no se puede acceder a /home/tincho/Descargas/Hola/Mas/ASA: No existe el archivo o el directorio

Agradecería si alguien me encaminara con lo que sigue del problema, nose como hacer para separar los archivos de cada usuario y después enviarles por mail.
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1807
Registrado: Dom Oct 10, 2004 7:00 am

Re: Problema con SCRIPT

Mensaje por neurus » Mar Nov 24, 2015 7:55 pm

Sospecho que es un problema con la recursividad.
En este momento estoy en la oficina, con Windows, así que no puedo probar el script. Y la verdad, es que leyéndolo no me doy cuenta de dónde puede estar la falla.

Hay dos hilos en los que participé que tal vez puedan ayudarte. Involucran ambas cosas: recursividad al leer directorios, y chequeo de archivos duplicados.

Duplicados:
tema49875.html

Recorrido recursivo:
tema50047.html
martinp
Forista Nuevo
Forista Nuevo
Mensajes: 5
Registrado: Mar Nov 24, 2015 3:00 am

Re: Problema con SCRIPT

Mensaje por martinp » Mar Nov 24, 2015 8:10 pm

neurus escribió:Sospecho que es un problema con la recursividad.
En este momento estoy en la oficina, con Windows, así que no puedo probar el script. Y la verdad, es que leyéndolo no me doy cuenta de dónde puede estar la falla.

Hay dos hilos en los que participé que tal vez puedan ayudarte. Involucran ambas cosas: recursividad al leer directorios, y chequeo de archivos duplicados.

Duplicados:
tema49875.html

Recorrido recursivo:
tema50047.html
Mira encontré que en la linea " find $1 -mindepth 1 -type f -exec md5sum {} \; | sort | uniq -w33 -D |awk '{print $2}' " al usar el "awk" es el que no me pone el nombre completo del archivo, si le sacas el awk si me sale el archivo con el nombre completo, el problema es que yo necesito la segunda columna para luego pasársela al ls...
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1807
Registrado: Dom Oct 10, 2004 7:00 am

Re: Problema con SCRIPT

Mensaje por neurus » Mar Nov 24, 2015 9:12 pm

Entonces debes modificar el separador de campo de awk.

awk -F "lo que sea el separador de campo (por defecto es el espacio)" '{print $etc}'

Pd: si quieres, dame un ejemplo de resultado sin awk, para ver cuál podría ser el separador de campo.
martinp
Forista Nuevo
Forista Nuevo
Mensajes: 5
Registrado: Mar Nov 24, 2015 3:00 am

Re: Problema con SCRIPT

Mensaje por martinp » Mar Nov 24, 2015 11:18 pm

neurus escribió:Entonces debes modificar el separador de campo de awk.

awk -F "lo que sea el separador de campo (por defecto es el espacio)" '{print $etc}'

Pd: si quieres, dame un ejemplo de resultado sin awk, para ver cuál podría ser el separador de campo.
Mira al ejecutar esto

Código: Seleccionar todo

find "$1" -mindepth 1 -type f -exec md5sum {} \; | sort -b | uniq -w33 -D
sin "awk" me tira esto(que serian loo archivos duplicados):

f2bcf34f5f531914d0cdee6ee5393189 /home/tincho/Descargas/ASA(copia).pdf
f2bcf34f5f531914d0cdee6ee5393189 /home/tincho/Descargas/ASA.pdf
f2bcf34f5f531914d0cdee6ee5393189 /home/tincho/Descargas/Hola/ASA(copia).pdf
f2bcf34f5f531914d0cdee6ee5393189 /home/tincho/Descargas/Hola/Mas/ASA (copia).pdf

*Hasta acá ningún problema, si te fijas el ultimo archiv

Código: Seleccionar todo

 /home/tincho/Descargas/Hola/Mas/ASA (copia).pdf 
en la parte "ASA (copia).pdf" ese separador es el que me genera problemas a la hora de hacer un "ls".

Bien ahora vamos con la misma secuencia pero con "awk"

Código: Seleccionar todo

find /home/tincho/Descargas/ -mindepth 1 -type f -exec md5sum {} \; | sort -b | uniq -w33 -D |awk '{print $2}'
/home/tincho/Descargas/ASA(copia).pdf
/home/tincho/Descargas/ASA.pdf
/home/tincho/Descargas/Hola/ASA(copia).pdf
/home/tincho/Descargas/Hola/Mas/ASA

*Si te fijas el ultimo archivo

Código: Seleccionar todo

/home/tincho/Descargas/Hola/Mas/ASA
veras que debería ser "ASA (copia).pdf", bueno ahí esta mi problema todavía no puedo solucionarlos, probé con mil cosas.
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1807
Registrado: Dom Oct 10, 2004 7:00 am

Re: Problema con SCRIPT

Mensaje por neurus » Mié Nov 25, 2015 1:34 am

Entonces usa "/" como separador de campo. E imprime el último ($NF).

Código: Seleccionar todo

awk -F "/" '{print $NF}'
Edit: acabo de darme cuenta de que no va a funcionar, porque eso te imprime el nombre del archivo, pero no la ruta.

¿Estás obligado a usar awk?

Eso es más simple con cut:

Código: Seleccionar todo

cut --complement -f -1 -d " "
martinp
Forista Nuevo
Forista Nuevo
Mensajes: 5
Registrado: Mar Nov 24, 2015 3:00 am

Re: Problema con SCRIPT

Mensaje por martinp » Mié Nov 25, 2015 2:38 am

neurus escribió:Entonces usa "/" como separador de campo. E imprime el último ($NF).

Código: Seleccionar todo

awk -F "/" '{print $NF}'
Edit: acabo de darme cuenta de que no va a funcionar, porque eso te imprime el nombre del archivo, pero no la ruta.

¿Estás obligado a usar awk?

Eso es más simple con cut:

Código: Seleccionar todo

cut --complement -f -1 -d " "
Espectacular.. Me anduvo joya, pero tengo que guardar la salida en un archivo.txt y luego aplicar el cut..... El tema es que cuando aplico el cuto me quedan todas las ruta en una misma linea y no una abajo de la otra...

HELP!!! Nose como hacer este trabajo me esta matando, encima mañana tengo que tenerlo terminado y exponerlo en la facultad! =( Nose por donde empezar para guardar cada archivo duplicado de cada usuario y luego mandarlo por mail..
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje