Linux/Unix Shell Scripting - simular comando find

 
Vista:
sin imagen de perfil
Val: 2
Ha disminuido su posición en 8 puestos en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

simular comando find

Publicado por ANA BELEN (3 intervenciones) el 26/12/2020 20:32:52
tengo que hacer un script que simule el comando find, sin utilizar ni find ni ls
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 84
Oro
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

simular comando find

Publicado por joel (32 intervenciones) el 27/12/2020 09:38:03
la verdad es que sabría simularlo utilizando el comando "ls"... pero sin el... no sabría como hacerlo...

Si lo encuentras, te agradecería que nos lo mostraras.
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

simular comando find

Publicado por Abns (3 intervenciones) el 27/12/2020 11:10:52
Estoy en ello. Se me ocurre con for e if recursivo
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 joel
Val: 84
Oro
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

simular comando find

Publicado por joel (32 intervenciones) el 27/12/2020 11:14:52
Si, pero como obtienes los archivo de un directorio dado?
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

simular comando find

Publicado por Ana (3 intervenciones) el 27/12/2020 12:36:18
Se me ocurre For i in RUTA/*.
No se que resultado dará
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

simular comando find

Publicado por Tom (361 intervenciones) el 28/12/2020 11:29:45
Si no sabes qué resultado dará ... ¿ Por qué no lo pruebas a ver ?
Algo como esto (absolutamente ineficaz) podría funcionar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#! /bin/bash
 
PATTERN=.*alien.*
BASE="/tmp"
 
find_in_dir() {
	for F in $1/*
	do
		if [[ $(basename "$F") =~ $PATTERN ]]
		then
			echo $F
		fi
		if [ -d "$F" ]
		then
			find_in_dir "$F"
		fi
	done
}
find_in_dir $BASE
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

simular comando find

Publicado por Tomás (3 intervenciones) el 06/06/2021 22:30:28
Tengo hasta aquí sin recorrer recursivamente los subdirectorios:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/bin/sh
 
# Realizar un Shell Script de UNIX/Linux que simule el comando `find`. Podrá recibir de uno a tres parámetros:
# - En caso de ser uno, será el *fichero* a buscar en el *directorio actual*.
# - En caso de ser dos, será una de las siguientes opciones:
#    *  *Directorio* (ruta completa) y *fichero* a buscar en ella.
#    *  *Fichero* y opcion *-s”*; buscará el fichero en la *ruta actual* y sus
# *subdirectorios*.
# - En caso de ser tres serán *directorio* (ruta completa), *fichero* y opcion *-s”*; buscará
# el fichero en la ruta y sus subdirectorios. Ejemplos:
#    `Buscar fichero`
#    `Buscar directorio fichero`
#    `Buscar fichero -s`
#    `Buscar directorio fichero –s`
 
# Se valorará la eficiciencia y control de errores. No se podrá usar los comando `find` ni `ls`.
 
 
# Declaramos 3 variables que inicializaremos según el número de argumentos pasados
DIRECTORIO=
FICHERO=
OP_SUBD=
 
case $# in
    1)
        FICHERO="$1";
        DIRECTORIO=$(pwd);
        OP_SUBD=false;
        ;;
    2)
        if test "$2" = "-n"; then
            FICHERO="S1";
            DIRECTORIO=$(pwd);
            OP_SUBD=true;
        else
            FICHERO="$2";
            DIRECTORIO="$1";
            OP_SUBD=false;
        fi
        ;;
    3)
        FICHERO="$2";
        DIRECTORIO="$1";
        OP_SUBD=true;
        ;;
    *)
        echo "Número de parámetros incorrecto."
        exit 1;
esac
 
# Esto sería sin la opción de buscar en los subdirectorios
 
for VAR in "$DIRECTORIO"/*
do
    if test -f "$VAR"; then
        # Comentar el "echo" de la siguiente línea si ya no se está depurando
        echo "Archivo regular: $VAR";
        # "${VAR##*/}" Para quitar la parte de la ruta y dejar sólo el nombre del fichero
        if test "${VAR##*/}" = "$FICHERO"; then
            # Comentar el "echo" de la siguiente línea si ya no se está depurando
            echo "ENCONTRADO $FICHERO";
            # Comentar el "echo" de la siguiente línea si ya no se está depurando
            echo "Pulse una tecla para salir...";
            read TECLA;
            exit 0;
        fi
    elif test -d "$VAR"; then
        echo "Directorio: $VAR";
    fi
done
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

simular comando find

Publicado por Tomás (3 intervenciones) el 06/06/2021 22:33:03
Lo he subido a GitHub, aquí lo puedes ver mejor: https://github.com/tlopezv/Programaci-n-Shell-script/blob/main/script_buscar.sh
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

simular comando find

Publicado por Tomás (3 intervenciones) el 06/06/2021 22:52:09
Versión completa con RECURSIVIDAD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/sh
 
# Realizar un Shell Script de UNIX/Linux que simule el comando `find`. Podrá recibir de uno a tres parámetros:
# - En caso de ser uno, será el *fichero* a buscar en el *directorio actual*.
# - En caso de ser dos, será una de las siguientes opciones:
#    *  *Directorio* (ruta completa) y *fichero* a buscar en ella.
#    *  *Fichero* y opcion *-s”*; buscará el fichero en la *ruta actual* y sus
# *subdirectorios*.
# - En caso de ser tres serán *directorio* (ruta completa), *fichero* y opcion *-s”*; buscará
# el fichero en la ruta y sus subdirectorios. Ejemplos:
#    `Buscar fichero`
#    `Buscar directorio fichero`
#    `Buscar fichero -s`
#    `Buscar directorio fichero –s`
 
# Se valorará la eficiciencia y control de errores. No se podrá usar los comando `find` ni `ls`.
 
 
# Declaramos 3 variables que inicializaremos según el número de argumentos pasados
DIRECTORIO=
FICHERO=
OP_SUBD=
 
case $# in
    1)
        FICHERO="$1";
        DIRECTORIO=$(pwd);
        OP_SUBD=false;
        ;;
    2)
        if test "$2" = "-s"; then
            FICHERO="$1";
            DIRECTORIO=$(pwd);
            OP_SUBD=true;
        else
            FICHERO="$2";
            DIRECTORIO="$1";
            OP_SUBD=false;
        fi
        ;;
    3)
        FICHERO="$2";
        DIRECTORIO="$1";
        OP_SUBD=true;
        ;;
    *)
        echo "Número de parámetros incorrecto."
        exit 1;
esac
 
# Esto sería sin la opción de buscar en los subdirectorios
 
funcBuscar() {
    # Machacamos el valor de la variable DIRECTORIO con el parámetro pasado
    DIRECTORIO="$1"
    for VAR in "$DIRECTORIO"/*
    do
        if test -f "$VAR"; then
            # Comentar el "echo" de la siguiente línea si ya no se está depurando
            echo "Archivo regular: $VAR\t\tComparamos:${VAR##*/} = $FICHERO";
            # "${VAR##*/}" Para quitar la parte de la ruta y dejar sólo el nombre del fichero
            if test "${VAR##*/}" = "$FICHERO"; then
                # Comentar el "echo" de la siguiente línea si ya no se está depurando
                echo "ENCONTRADO $FICHERO";
                # Comentar el "echo" de la siguiente línea si ya no se está depurando
                echo "Pulse una tecla para salir...";
                read TECLA;
                exit 0;
            fi
        elif test -d "$VAR"; then
            echo "Directorio: $VAR";
            if test "$OP_SUBD" = "true"; then
                funcBuscar "$VAR";
            fi
        fi
    done
}
 
funcBuscar "$DIRECTORIO"
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