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
0
#! /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
#!/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
#!/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"