Linux/Unix Shell Scripting - Script que diga todo lo que contiene un directorio y que tipo es

   
Vista:
Imágen de perfil de dryant

Script que diga todo lo que contiene un directorio y que tipo es

Publicado por dryant (9 intervenciones) el 17/01/2014 12:45:26
Hola!

En clase de Linux nos han puesto un ejercicio que llevo dos dias intentando solucionar pero todavia no he conseguido hacerlo :(
Se trata de hacer un script el cual te diga todos lo que contiene un directorio y de que tipo es.
Copio el ejercicio para que quede mas claro:
"Escriba un guion que acepte el nombre de un directorio como argumento y muestre como resultado el nombre de todos y cada uno de los archivos del mismo y una leyenda que diga "Directorio", "Enlace" o "Archivo regular", según corresponda. Incluya la comprobación necesaria sobre el argumento, es decir, determine si el nombre aportado se trata de un directorio existente."
He estado probando hacer un "ls -l > lsdehome" para despues leer las lineas del archivo con grep y segun si es un guion el primer caracter o una d, hacer un if y decir que es archivo, o directorio, pero creo que me estoy liando mucho yendo por ahi.
ALguien podria orientarme un poco?
No quiero que me hagais el ejercicio y ya está, ya que lo que quiero es aprender, así que me gustaría que me explicarais como hacerlo.

Un saludo y gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder

Script que diga todo lo que contiene un directorio y que tipo es

Publicado por Tom (253 intervenciones) el 17/01/2014 13:42:35
Pues el ejercicio parece estar basado en el uso del comando ls.
Así que lo mejor es que te leas la página man y algún tutorial.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
Imágen de perfil de xve

Script que diga todo lo que contiene un directorio y que tipo es

Publicado por xve (253 intervenciones) el 17/01/2014 15:29:40
Hola Dryant, haber que te parece este código...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
 
# realizamos un bucle por todo el directorio indicado
for i in *
do
    echo "\t"$i
    if [ -d "$i" ];then
        echo "$i es un directorio"
    elif [ -f "$i" ];then
        echo "$i es un archivo ordinario"
    else
        echo "$i no se que es..."
    fi
done

Tiene que mejorarlo un poquito para solicitar la carpeta, pero creo que con esto te vale... coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de dryant

Script que diga todo lo que contiene un directorio y que tipo es

Publicado por dryant (9 intervenciones) el 18/01/2014 10:25:19
Hola xve y gracias por tu respuesta!
Me ha funcionado PERFECTO!!!.

Podrias explicarme un poco algunas dudas que tengo?

1- for i in * --> ¿Que hace exactamente el *?
2- echo "\t"$i me saca por pantalla esto: \tMidirectorio. Supongo que la tabulacion no funciona porque estoy en un terminal de MacOs...
3- Para el tema de los enlaces, cual sería el parametro? -l ?

Muchisimas gracias por tu ayuda!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Script que diga todo lo que contiene un directorio y que tipo es

Publicado por xve (253 intervenciones) el 18/01/2014 18:27:14
Hola Dryant, te comento...

1- for i in *:
Va recorriendo todos los archivos de la carpeta. * equivale a todo el contenido.

2- Si, \t es una tabulación, pero deberia de funcionar en Mac de igual forma... que te hace cuando pones el \t?

3- Cuando dices enlaces, a que te refieres?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de dryant

Script que diga todo lo que contiene un directorio y que tipo es

Publicado por dryant (9 intervenciones) el 18/01/2014 20:03:56
Hola de nuevo.

Acabo de probar el script en linux ubuntu y le pasa igual al \t
esto es lo que muestra:

\tPlantillas
Plantillas es un directorio

He probado con comillas simples, comillas invertidas y comillas dobles y no me ha funcionado con ninguna.

Enlaces me refiero, creo, a los alias. En el primer mensaje que copie todo el ejercicio tal cual, viene. De todas formas lo copio de nuevo aqui:
"Escriba un guion que acepte el nombre de un directorio como argumento y muestre como resultado el nombre de todos y cada uno de los archivos del mismo y una leyenda que diga "Directorio", "Enlace" o "Archivo regular""

Sigo sin entender como funciona el for i in *...
Se como funciona un for de otros lenguajes, pero lo que no entiendo es lo siguiente: si yo le paso un argumento, $1, porque pones i?? como sabe que la i pertenece al directorio que le he pasado por argumento??

GRACIAS!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Script que diga todo lo que contiene un directorio y que tipo es

Publicado por xve (253 intervenciones) el 19/01/2014 11:54:53
La verdad es que no se porque no te funciona el \t aqui te adjunto una imagen de como se visualiza en Debian...


Como ves, a mi si que me hace los tabuladores... puede ser que lo estés ejecutando con bash archivo.sh? o algo por el estilo?
En la cabecera te puse bash, pero lo ejecuto con sh archivo.sh supongo que fue parte del copy&paste que hice de algún otro ejemplo...

Sobre el tema del alias, entiendo que es un enlace simbólico, lo que en Windows seria un acceso directo, no?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh
 
# realizamos un bucle por todo el directorio indicado
for i in *
do
    echo "\t"$i
    if [ -d "$i" ];then
        echo "$i es un directorio"
    elif [ -h "$i" ];then
        echo "$i es un enlace simbolico"
    elif [ -f "$i" ];then
        echo "$i es un archivo ordinario"
    else
        echo "$i no se que es..."
    fi
done

Espero que ahora cumpla con las especificaciones.


Sobre el tema del asterisco, equivale a todos los archivos.. cuando tu haces un ls /carpeta/* te muestra todos los archivos... pero cuando estas en la misma carpeta puedes hacer ls *
El for i in * lo que hace, es que asigna a la variable "i" en cada iteración del bucle un archivo/directorio/enlace de la carpeta en la que se encuentra.
"i" es una variable, no tiene nada que ver con los parámetros recibidos... es un simple bucle.

Si quieres que busque en la carpeta que tu le pases como parametro al script, seria algo así:
1
2
3
...
for i in $1/*
...

Espero que me haya sabido explicar... coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de dryant

Script que diga todo lo que contiene un directorio y que tipo es

Publicado por dryant (9 intervenciones) el 20/01/2014 12:57:21
Hola de nuevo!

El archivo lo estaba ejecuntando con bash y el archivo se llama 6-2.sh

Ahora la tabulacion funciona! Como tenía que haber sido para ejecutarlo con bash para que funcionara?

Ya he entendido perfectamente lo de la i en el for con *!

Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Script que diga todo lo que contiene un directorio y que tipo es

Publicado por xve (253 intervenciones) el 20/01/2014 19:33:23
Hola Dryant, para bash, es utilizando el -e en el echo

1
echo -e "\t texto"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de dryant

Script que diga todo lo que contiene un directorio y que tipo es

Publicado por dryant (9 intervenciones) el 20/01/2014 21:11:27
Todo Solucionado! Perfecto!
Muchas Gracias xve!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de dryant

Script que diga todo lo que contiene un directorio y que tipo es

Publicado por dryant (9 intervenciones) el 10/02/2014 12:03:19
Reabro este hilo para una nueva consulta sobre el mismo:

Para que el script haga lo mismo pero de forma recursiva como sería?
Es decir, para que me diga tambien que tipo de archivos son los que estan dentro de las carpetas que estan en el directorio que le paso como argumento.

Alguien podria indicarme como es?

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar