Mostrando las entradas con la etiqueta redirecciones. Mostrar todas las entradas
Mostrando las entradas con la etiqueta redirecciones. Mostrar todas las entradas

lunes, 5 de agosto de 2013

Búsqueda de directorios en forma recursiva con python

Comentaban en una entrada de un comando como tree para Windows,el cual existe que es lstree.exe desde la cmd de Windows,pero también pensé en programar uno similar usando algún lenguaje de programación,como C o C++ para hacer tree para Windows pero como ya esta lstree.exe no es necesario asi que solo me quede con la idea del algoritmo,de como seria y es muy sencillo,una búsqueda recursiva de archivos y directorios,claro que tree tiene argumentos como ordenar alfabéticamente,solo directorios,mostrar bytes,etc pero luego del algoritmo principal se saca lo demás,así que para una búsqueda recursiva basta usar una función recursiva.

Y que tiene que ver python?

Pues python o ruby son muy sencillos y los uso para hacer prototipos,como un tipo de pseudocodigo que pueda ejecutar,ya que python es mucho mas sencillo que C,C++,C#,Java y bueno:

 #!/usr/bin/env python
 from glob import glob  
 from os import path  
 """  
 Algoritmo:  
   
 1.-Recorrer directorio y selecionar los directorios y archivos.  
   
 2.-Recorrer cada directorio y hacer lo mismo que el paso 1  
   
 """  
   
 def dirs(x,n):  # funcion principal
     di = glob(x+"/"+"*")  # vemos todo lo que esta adentro del directorio que nos manden
     tabs = "  "*n  # Algo de vista
     do = x.split('/')  # Esto es para mostrar el archivo(por culpa de glob)
     print tabs+do[-1]+" /"  # Mostramos la vista
     for i in di:  # Recorremos el directorio
         if path.isdir(i):  # Si es direcotorio
             dirs(i,n+1)  # Empezamos la función recursiva
         elif path.isfile(i):  # Si es archivo
             do = i.split('/')  # gracias a glob :/
             print "|"+tabs+do[-1]  # Lo mostramos
   
   
 if __name__ == "__main__":  # Asi se ejecutan los scripts
     dirs(".",0)  # Iniciamos el script buscando en el directorio actual
   

Veamos.

Creamos algunos archivos y carpetas:



tree :


El script en python:


Como ven le falta mucha vista,pero eso ya se hace teniendo el script principal,lo unico que queria mostrar era la busqueda recursiva usando una funcion recursiva.

Espero que les sirva :D.

Un extra para los Linuxeros/Unixeros:

 find . -print | sed 's;[^/]*/;->|   ;g'


Eso es todo :D.




Leer más...

domingo, 9 de diciembre de 2012

Tutorial flujos estándares de Unix

Esto suena un poco difícil o aburrido,por donde lo quieran ver,pero es algo muy útil y que usamos hasta en Ubuntu si hacemos copy & paste de un sitio,lo que pasa es que todos estos comandos de Unix los mantienen los sistemas tipo Unix GNU/Linux, BSD, o los Single Unix.

Así que vamos a darles un repaso a esto para que usemos mas la Terminal(Consola) de nuestro sistema tipo Unix o single Unix :D

Primero que nada vamos a ver los tres tipos de flugos que existen

stdin : Standard input (Entrada estándar)

stdout : Standard Out (Salida estándar)

stderr : Standard Error(Error estándar)

Explicación:

stdin

stdin es la entrada estándar de nuestro teclado en la mayoría de los casos,mas que nada para interactuar con nosotros y recoger información.

Si visitan este sitio a menudo se habran dado cuenta que coloco algunos scripts en Perl,este lenguaje usa stdin para recoger información desde el teclado:

<STDIN>
Así que en la shell de Unix o Bash/etc no seria mas que solamente escribir algo y estaríamos usando stdin.


stdout

Lo contrario a stdin es la salida de lo que pedimos con stdin,por ejemplo lo que sale de

cat archivo

Al escribir cat archivo estamos haciendo stdin, y al mostrarnos la salida es stdout.

stderr

Esto es los mensajes de error,que imprime la consola al hacer algo que no se puede o da error

por ejemplo escribir

sajdfsjf
Operadores

Como lo habíamos visto antes existen tuberías que redireccionan nuestros comandos, aquí vamos a adentrarnos un poco mas,ya que vamos a hablar mas a fondo de redireccionar stdin stderr y stdout.


Comando >

Redirige el stdout a un archivo,si este no existe lo crea y si existe lo borra y lo llena con el nuevo contenido.

Ejemplo:

echo "Hola" > archivo.txt 

Comando >>

Redirige stdout a un archivo,si este no existe lo crea y si existe añade la salida al final.

Ejemplo:

echo "hola" >> archivo.txt && echo "hola" >> archivo.txt


Comando 2>

Crea un archivo con stderr, si ya existe  lo borra y lo llena con el nuevo contenido.



Comando 2>>

Redirige stderr a un archivo,si este no existe lo crea y si existe añade la salida al final.



Comando &>

Crea un archivo que contiene el stderr y el stdin. Si el fichero existe,lo borra y lo llena con el nuevo contenido.

Ejemplo

cat ksksjd archivo.txt &> fichero.txt
Este nos manda los errores como la salida normal:


Otra forma de hacer esto es:

cat kdkkd archivo.txt > fichero.txt 2>&1




El comando <

Lo que hace este comando no es gran cosa,ya que como dige hace stdin el cual ya estamos haciendo al escribir

Osea que podemos hacer esto

cat < archivo.txt

Y es igual que esto

cat archivo.txt
O

ls < ~/

Es igual que

ls ~/
o

echo -e "Mi HOME\n" > mis_archivos.txt  && ls < ~/ >> mis_archivos.txt

Es igual que


echo -e "Mi HOME\n" > mis_archivos.txt  && ls ~/ >> mis_archivos.txt
Aunque hay algunas excepciones








Comando <<

Con este comando entramos al $PS2 y podemos meter todas las lineas que queramos ya que es stdin sin final de linea,osea que no borra el archivo que usemos.

Ejemplo:

cat << SALIR >> fichero2.txt
Esto es un poco mas complicado ya que al hacer esto es como si comenzaramos a escribir en un editor de texto,el cual mandara lo que escribamos a fichero2.txt y terminaremos de escribir al escribir SALIR:


Eso es todo :D

-->

Leer más...