domingo, 9 de septiembre de 2012

Mi primer gran logro con Bash

Hoy sin duda es un dia para recordar, pues  ejecute mi primer bash, que si bien no es la gran cosa, me a ahorrado mas de 2 semanas de trabajo...Porque?... pues ahora lo explico.

Resulta en este cuatrimestre, llevamos la materia de servidores Zentyal, Zentyal es una distro española, de servidores basada en ubuntu, de momento por lo poco que he vsito de ella... es genial, pero eso lo dejare para otro post.

El caso un día, llego a mi casa en compañía de un amigo y  con la emoción de Zentyal, decidimos utilizar  la maquina de mis padres para correr nativamente el Zentyal, obviamente pensando en particionar para no borrar  unidades, información  y demás.

Al poco tiempo creamos nuestra USB booteable e instalamos, pero a mitad de instalación  nos damos cuenta que no nos pidió  particiones, pensamos lo peor... y lo peor paso.

Zentyal acabo con TODO en esa maquina, fotos familiares, música, programas y demás, TODO fue eliminado.No podía dejar las cosas de esa manera, seria una perdida muy grande, sobre todo por las fotos, así que rápidamente busque alguna herramienta que me salvara el dia y encontre Photorec.

Resulta que Photorec, recupera la informacion de tu disco duro, con solo 2 lineas y lo agrupa en carpetas, bueno o almenos recupera integros los archivos pequeños, porque todo lo agrupo en carpetas un tamaño fijo predeterminado.

lo cual me creo mas de 1,500 carpetas  en donde dentro de ellas, se encontraba toda mi información, dispersada, seria un trabajo titanico  revisar cada una de ellas buscando las imágenes.

Para esto, ya tenia poco mas de 1 mes estudiando de manera lenta pero constante, algo de bash y después de lo ocurrido me dije, porque no crear un pequeño script que me ayude a sacar las imágenes de las carpetas y me las ponga en una, así sera mas fácil el trabajo, así nació la idea, tome una bolsa de frituras y mi terminal, y empece a crear mi destrozo de lineas.

Al final, de  un tiempo, logre crearlo, el Script que me ahoraria DÍAS de trabajo.

#!/bin/bash

echo "Cual es el numero maximo de carpetas?: "
read N
CONT=0
command mkdir /home/skynet/fam
while [ $CONT -le $N ]
do

let CONT=$CONT+1
command cd /home/skynet
command cd 001.${CONT}
cp /home/skynet/001.${CONT}/*.jpg /home/skynet/fam

done

echo "respaldo finalizado"


Mi mayor orgullo hasta el momento  en cuanto a bash se refiere. Pero esto no quedara así, con esto solo reafirmo la gran  ilusión que tenia puesta sobre bash, una herramienta que muchos ignoran, pero  es demasiado potente y no tiene que envidiarle  a otras herramientas o lenguajes.


5 comentarios:

  1. ¿Por qué usas command antes del mkdir y de los cd?

    Puedes atomatizar N haciendo:
    N=`ls | grep "^001" | wc | awk '{print $1-1}'`

    Los dos "cd" del while sobran, no los necesitas puesto que haces el "cp" con rutas absolutas.

    También sería interesante poner un 2> /dev/null al final del mkdir, así no te printará mensajes de error si el directorio ya existe.

    ResponderEliminar
    Respuestas
    1. por lo que he leeido command es utilizado para ejecutar commandos.

      Me cuesta entender esa linea...
      N=`ls | grep "^001" | wc | awk '{print $1-1}'`

      podrias explicarmela?

      Eliminar
    2. N=`ls | grep "^001" | wc | awk '{print $1-1}'`

      La variable n atrapa el valor del "ls | grep "^001" | wc | awk '{print $1-1}'"

      Con el grep filtras sólo los ficheros que empiecen (circunflejo) con la cadena de texto 001, con el wc los cuentas y con el awk '{print $1}' imprimes el primer valor que hay en la línea del wc. Vamos, que N valdría el número de archivos/directorios que empiezan con 001.

      Eliminar
  2. Perdón, el awk '{print $1-1}' es si haces wc -l. Para wc normal es awk '{print $1}'

    ResponderEliminar
  3. Más rápido aún: cp -pr /home/skynet/001* /home/skynet/fam/
    Es una copia recursiva (-r) que conserva las fechas de creación y permisos (-p). Además guarda la jerarquía de directorios exacta que tenías en los 001*

    ResponderEliminar

LinkWithin

Related Posts Plugin for WordPress, Blogger...