encontra saindo no 1º código encontrado e de retorno

0

Gostaria de usar find em uma estrutura de diretórios para sair, se pelo menos um arquivo existe com uma condição de destino, porque isso causará uma falha no restante de um script de shell.

Como este script de shell deve ser executado em estruturas de diretório grandes, eu gostaria de sair dele o mais rápido possível.

Por exemplo, eu gostaria de fazer:

find . -name "test" -prune
# if "test" file found, just exit immediately
if [ $? -eq 0 ] ; then
    echo error... >&2
    exit 2
fi
...continuation of shell script

Mas -prune é sempre avaliado como verdadeiro.

Qual é a maneira mais eficiente de escrever uma expressão find para alcançar esse tipo de curto circuito find ?

Eu gostaria de usar como padrão possíveis construções de shell Bourne e evitar o uso de qualquer arquivo temporário.

    
por daniel Azuelos 16.08.2016 / 17:40

2 respostas

2

Observe que -prune apenas interrompe a recursão em subdiretórios; não pára na primeira entrada encontrada. Você provavelmente quer -quit com GNU ou FreeBSD find ou -exit com NetBSD find :

$ find . -name test 
./test
./Y/test

$ find . -name test -print -quit
./test

Em vez de testar o código de retorno de find , você pode testar a saída

files=$(find . -name "test" -print -quit)

if [ -n "$files" ]
then
  echo "error... found $files" >&2
  exit 2
fi
    
por 16.08.2016 / 17:55
0
find . -name "test" |grep -m1 /test$
    
por 16.08.2016 / 17:48