Para uma tarefa, devo escrever um script bash que pode atuar como um find
muito básico, mas sem usar o comando find
. Por exemplo, se eu colocar esta entrada:
my_find ~/homedir/ -name 'test*' -name '*.o' -type f
Eu preciso que ele pesquise ~/homedir/
para qualquer coisa que corresponda ao nome test*
com o caractere curinga, então AND
e pesquise nesses resultados por qualquer coisa que corresponda a *.o
name e finalmente (embora possivelmente redundante) , procure apenas por arquivos. Finalmente, listará todos os resultados.
A partir de agora, criei uma variável que armazena o caminho do diretório ( dirpath=$1
). Em seguida, uso shift
para me livrar do primeiro argumento e, em seguida, faço isso (observe que -type
ainda não está implementado):
while (($#)); do
if [[ $1 == "-name" ]]; then
# process the name here?
shift 2 # get rid of -name "name"
fi
done
Eu meio que me pergunto como posso estruturar ou mesmo fazer isso. Eu tenho uma função parcialmente concluída que irá recurse através do caminho do diretório, mas eu não tenho certeza como / onde eu posso processar o argumento passado. Aqui está a função recursiva para olhar através de cada diretório.
recurse_path () {
for i in "$@"; do
# process and store matching file names in the array?
if [[ -d "${i}" ]]; then
cd "${i}"
recurse_path *
fi
done
}
Então, como posso pesquisar meus nomes de arquivos correspondentes e armazenar os resultados em uma matriz enquanto uso esta função? Além disso, este é o caminho certo para fazer isso, ou há uma maneira potencialmente mais fácil de atualizar os resultados que recebo quando cada comando é visto? Sou novato no bash scripting, então gostaria de receber qualquer conselho.