› Foros › PC › Software libre
ubuntu@ubuntu:~/Desktop/fran$ bash ejercicio6.txt "/home/ubuntu/Desktop/Practicas"
La clasificacion de ficheros del directorio /home/ubuntu/Desktop/Practicas es:
Hay 0 ficheros de texto:
Hay 0 directorios:
Hay 19 ficheros ejecutables: comandosshell.pdf PR1-Comparacion-de-comandos.pdf PR3-apuntes_c.pdf PR3-gdb.pdf PR3-llamadas.pdf PR3-make.pdf PR3-prac-smallsh.pdf PR3-smallsh.pdf PR4-aplis.pdf PR4-ayuda-realizacion.pdf PR4-entorno-oso.pdf PR4-enun_prac4.pdf PR4-kernel.pdf PR4-leeme.pdf PR4-mkboot.pdf PR4-multita.pdf TEO-8086tabla.PDF TEO-8086transparencias.PDF TEO-tema9.pdf
naked_snake escribió:Hola
Estoy haciendo unos ejercicios de shell, mas concretamente del bash y tengo una duda que seguro que su solucion está tirada pero no caigo.
Basicamente estoy escribiendo un guion que devuelve el numero de ficheros de cada tipo que hay en el directorio que le paso como parametro. No tengo problemas a la hora de mostrar los ficheros de texto o ejecutables, uso
t=$(file * | grep .txt | wc -l)
echo Hay $t ficheros de texto: $(ls | grep .txt)
Por ejemplo un resultado mostrado por el shell seria:ubuntu@ubuntu:~/Desktop/fran$ bash ejercicio6.txt "/home/ubuntu/Desktop/Practicas"
La clasificacion de ficheros del directorio /home/ubuntu/Desktop/Practicas es:
Hay 0 ficheros de texto:
Hay 0 directorios:
Hay 19 ficheros ejecutables: comandosshell.pdf PR1-Comparacion-de-comandos.pdf PR3-apuntes_c.pdf PR3-gdb.pdf PR3-llamadas.pdf PR3-make.pdf PR3-prac-smallsh.pdf PR3-smallsh.pdf PR4-aplis.pdf PR4-ayuda-realizacion.pdf PR4-entorno-oso.pdf PR4-enun_prac4.pdf PR4-kernel.pdf PR4-leeme.pdf PR4-mkboot.pdf PR4-multita.pdf TEO-8086tabla.PDF TEO-8086transparencias.PDF TEO-tema9.pdf
Mi duda es, ¿que hago para poder mostrar los directorios dentro del directorio, es decir, las carpetas?. Cuando hago ls no me sale ninguna extension concreta al contrario que con los txt o ejecutables tipo pdf o zip y no se que hacer para filtrar el resultado. ¿Que puedo hacer?
Gracias
file * | grep ".*:.*directory$" | sed -e "s/:.*directory//"
ls -d */
find . ! -name . -prune ! -name '.*' -type d -print
ls -F | grep '/' | cut -f '1' -d '/'
naked_snake escribió:EDITO: Otra duda de novato. Cuando cuento el numero de ficheros txt con la orden que he puesto arriba me salen el doble porque los ficheros se repiten con un ~ al final (p.ej esta ejercicio1.txt y ejercicio1.txt~) ¿Por que es? ¿Como lo puedo evitar?
amuchamu escribió:naked_snake escribió:EDITO: Otra duda de novato. Cuando cuento el numero de ficheros txt con la orden que he puesto arriba me salen el doble porque los ficheros se repiten con un ~ al final (p.ej esta ejercicio1.txt y ejercicio1.txt~) ¿Por que es? ¿Como lo puedo evitar?
Ésos son ficheros de respaldo hechos por algunos editores de texto y demás. Por ejemplo, gedit hace esas copias por defecto y las guarda cada X minutos.
feler escribió:amuchamu escribió:naked_snake escribió:EDITO: Otra duda de novato. Cuando cuento el numero de ficheros txt con la orden que he puesto arriba me salen el doble porque los ficheros se repiten con un ~ al final (p.ej esta ejercicio1.txt y ejercicio1.txt~) ¿Por que es? ¿Como lo puedo evitar?
Ésos son ficheros de respaldo hechos por algunos editores de texto y demás. Por ejemplo, gedit hace esas copias por defecto y las guarda cada X minutos.
Y, por tanto, podrías no mostrarlas. El problema esta en la parte de la expresión: grep .txt ya que no verifica que .txt se encuentre al final. Se puede solucionar con grep "\.txt$"
La clasificacion de ficheros del directorio /home/fran/Escritorio/franshell es:
Hay 0 ficheros de texto: ejercicio1.txt ejercicio2.txt ejercicio3.txt ejercicio4.txt ejercicio5.txt ejercicio6.txt
Hay 6 directorios: carpeta sin título/ carpeta sin título 2/ carpeta sin título 3/ carpeta sin título 4/ carpeta sin título 5/ ola/
Hay 0 ficheros ejecutables:
#! bin/bash
if [ "$1" != "" ]
then
echo
echo La clasificacion de ficheros del directorio $1 es:
cd $1
else
echo
echo La clasificacion de ficheros del directorio $PWD es:
fi
echo
t=$(file * | grep "\.txt$" | wc -l)
echo Hay $t ficheros de texto: $(ls | grep "\.txt$")
echo
d=$(ls -d */ | wc -l)
echo Hay $d directorios: $(ls -d */)
echo
e=$(file * | grep -i .pdf | wc -l)
echo Hay $e ficheros ejecutables: $(ls | grep -i .pdf)
echo
naked_snake escribió:feler escribió:amuchamu escribió:
Ésos son ficheros de respaldo hechos por algunos editores de texto y demás. Por ejemplo, gedit hace esas copias por defecto y las guarda cada X minutos.
Y, por tanto, podrías no mostrarlas. El problema esta en la parte de la expresión: grep .txt ya que no verifica que .txt se encuentre al final. Se puede solucionar con grep "\.txt$"
Hola, haciendo un nuevo ejercicio he comprobado que con grep "\.txt$" no consigo filtrar los ficheros de forma que no me aparezcan los que acaban en ~
¿Alguien me dice alguna forma de conseguirlo? Esque estoy probando pero nanai
EDITO: Veamos, realmente si muestra por pantalla los ficheros sin ~ pero no los cuenta bien, ya que siempre me devuelve 0 el contador.La clasificacion de ficheros del directorio /home/fran/Escritorio/franshell es:
Hay 0 ficheros de texto: ejercicio1.txt ejercicio2.txt ejercicio3.txt ejercicio4.txt ejercicio5.txt ejercicio6.txt
Hay 6 directorios: carpeta sin título/ carpeta sin título 2/ carpeta sin título 3/ carpeta sin título 4/ carpeta sin título 5/ ola/
Hay 0 ficheros ejecutables:
El codigo es este#! bin/bash
if [ "$1" != "" ]
then
echo
echo La clasificacion de ficheros del directorio $1 es:
cd $1
else
echo
echo La clasificacion de ficheros del directorio $PWD es:
fi
echo
t=$(file * | grep "\.txt$" | wc -l)
echo Hay $t ficheros de texto: $(ls | grep "\.txt$")
echo
d=$(ls -d */ | wc -l)
echo Hay $d directorios: $(ls -d */)
echo
e=$(file * | grep -i .pdf | wc -l)
echo Hay $e ficheros ejecutables: $(ls | grep -i .pdf)
echo
t=$(file * | grep "\.txt$" | wc -l)
t=$(ls | grep "\.txt$" | wc -l)
feler escribió:naked_snake escribió:feler escribió:
Y, por tanto, podrías no mostrarlas. El problema esta en la parte de la expresión: grep .txt ya que no verifica que .txt se encuentre al final. Se puede solucionar con grep "\.txt$"
Hola, haciendo un nuevo ejercicio he comprobado que con grep "\.txt$" no consigo filtrar los ficheros de forma que no me aparezcan los que acaban en ~
¿Alguien me dice alguna forma de conseguirlo? Esque estoy probando pero nanai
EDITO: Veamos, realmente si muestra por pantalla los ficheros sin ~ pero no los cuenta bien, ya que siempre me devuelve 0 el contador.La clasificacion de ficheros del directorio /home/fran/Escritorio/franshell es:
Hay 0 ficheros de texto: ejercicio1.txt ejercicio2.txt ejercicio3.txt ejercicio4.txt ejercicio5.txt ejercicio6.txt
Hay 6 directorios: carpeta sin título/ carpeta sin título 2/ carpeta sin título 3/ carpeta sin título 4/ carpeta sin título 5/ ola/
Hay 0 ficheros ejecutables:
El codigo es este#! bin/bash
if [ "$1" != "" ]
then
echo
echo La clasificacion de ficheros del directorio $1 es:
cd $1
else
echo
echo La clasificacion de ficheros del directorio $PWD es:
fi
echo
t=$(file * | grep "\.txt$" | wc -l)
echo Hay $t ficheros de texto: $(ls | grep "\.txt$")
echo
d=$(ls -d */ | wc -l)
echo Hay $d directorios: $(ls -d */)
echo
e=$(file * | grep -i .pdf | wc -l)
echo Hay $e ficheros ejecutables: $(ls | grep -i .pdf)
echo
Obviamente, no te funciona, el error esta aquí:t=$(file * | grep "\.txt$" | wc -l)
tienes que sutituir file * por ls, quedando asi:t=$(ls | grep "\.txt$" | wc -l)
:%s/file\ \*/ls/g
naked_snake escribió:Ok muchas gracias ¿Y por que no funciona con el file? No lo entiendo :S
#! bin/bash
if [ "$1" == "" ]
then
echo El numero de parametros es incorrecto
exit 1
fi
if [ "$2" != "" ]
then
echo El numero de parametros es incorrecto
exit 1
fi
array_numero=($1)
##No se como seguir puesto que tras la anterior asignacion no he conseguido el array que busco
if echo $1 | grep -x -q "[0-9]\+"
then
##Codigo comprobacion capicua
else
echo Numero incorrecto
exit 1
fi
naked_snake escribió:Muchas gracias feler, veo que dominas bastante bien el interprete de ordenes
Tengo otra duda a ver si alguien me ayuda.
Estoy tratando de hacer un ejercicio en el cual tengo que comprobar si el numero que le paso al guion como parametro es capicua. Previamente tengo que comprobar si el numero de argumentos es correcto y si es un numero positivo. Un factor muy importante es que no se puede usar la orden rev.
Habia pensado en acceder a cada uno de los numeros del entero pasado como parametro, metiendolo previamente en un array. El caso es que no se como hacerlo, puesto que si le asigno a una variable cualquiera array el $1 (primer parametro de entrada), se le asigna el numero completo y no cada uno de los numeros que lo forman#! bin/bash
if [ "$1" == "" ]
then
echo El numero de parametros es incorrecto
exit 1
fi
if [ "$2" != "" ]
then
echo El numero de parametros es incorrecto
exit 1
fi
array_numero=($1)
##No se como seguir puesto que tras la anterior asignacion no he conseguido el array que busco
if echo $1 | grep -x -q "[0-9]\+"
then
##Codigo comprobacion capicua
else
echo Numero incorrecto
exit 1
fi
¿Alguna solucion a mi problema? ¿Hay formas mejores de hacerlo?
Salu2
$ echo -n "sed" | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
des
$ echo -n "5234" | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
4325