Parando o comando find depois de localizar os arquivos em um diretório

1

Eu tenho um comando em um script Korn que é como escrito abaixo,

find <path1> <path2> <path3> -name filename

Depois disso, ele armazena a saída em um arquivo txt. Usando este arquivo txt, ele faz algumas operações.

Existe alguma maneira de usar o arquivo se o arquivo requerido for encontrado em path1, então o comando find não procuraria em path2 e path3 e pararia?

Eu tentei usar a opção -quit, parece que a opção -quit não funciona com a versão do IBM AIX do find. Não há nenhum comando locate no sistema. Nem tenho permissões para instalar.

Usar a opção pipe com head -1 faria o trabalho, mas se não houver outro arquivo no caminho2 e caminho3 e o arquivo estiver apenas no caminho1, ele ainda percorrerá a milha inteira e pesquisará todos os caminhos.

    
por Dhiren Dash 02.06.2015 / 20:01

1 resposta

1

A maneira como eu abordaria isso seria fazer um loop pelos diretórios, executando find em cada um até corresponder.

for dir in path1 path2 path3
do
    echo "Searching $dir" >&2
    match=$(find "$dir" -type f -name "filename" 2>/dev/null)
    test -n "$match" && echo "$match" && break
done

Você pode remover as duas instruções echo se quiser uma solução silenciosa. Na saída do loop, se $match não estiver vazio, ele conterá o nome completo do caminho e $dir conterá o diretório de nível superior sob o qual ele pode ser encontrado.

    
por 02.06.2015 / 23:02

Tags