Cómo usar find para completar la variable en el script de Shell

0

Estoy haciendo que el sencillo script de Shell sea un trabajo aburrido y repetitivo. El script cambia el directorio correctamente, y ahora quiero ejecutar otros scripts basados ​​en el argumento que escribí al ejecutar el script. Otros scripts están dispersos en subdirectorios y cada uno es único. Así que quiero insertar solo el nombre del archivo y dejar que el script descubra en qué subdirectorio está ese archivo.

Intenté algo como esto:

filename="default.ini"
while [ $# -gt 0 ] 
do
    case "$1" in
        -f) filename="$(find ./ -name $2)"; shift;;
        -*) echo >&2 \
            "usage: $0 [-v] [-f file] [file ...]"
            exit 1;; 
        *)  break;;     # terminate while loop
    esac
    shift
done

echo $filename

Pero, encontrar no devuelve ningún resultado, por lo que permanece default.ini. ¿Hay otra manera de resolver esto?

Miller
fuente
es de encontrar ./ en realidad lo que crees que debería ser? ¿Está buscando buscando en el directorio correcto?
glenn jackman

Respuestas:

1

Sugeriría que esta es una forma más idiomática de analizar las opciones:

filename="default.ini"
v_opt=false

while getopts :vf: opt; do
    case $opt in 
        f) find_out=$(find . -name "$OPTARG") 
           # do something with $find_out, such as checking if it's empty, or
           # if more than one file was found ...
           [[ $find_out ]] && filename=$(head -n 1 <<< "$find_out")
           ;;
        v) v_opt=true ;;
        ?) echo "usage: ..."; exit 1;;
    esac
done
shift $((OPTIND-1))

echo $filename
glenn jackman
fuente