sobre um exemplo no Linux ache man page

0

O seguinte exemplo na página man do Linux não parece funcionar:

   find repo/ -exec test -d {}/.svn \; -or \
   -exec test -d {}/.git \; -or -exec test -d {}/CVS \; \
   -print -prune

   Given the following directory of projects and their associated SCM
   administrative directories, perform an efficient search for the
   projects' roots:

   repo/project1/CVS
   repo/gnu/project2/.svn
   repo/gnu/project3/.svn
   repo/gnu/project3/src/.svn
   repo/project4/.git

   In this example, -prune prevents unnecessary descent into directories
   that have already been discovered (for example we do not search
   project3/src because we already found project3/.svn), but ensures
   sibling directories (project2 and project3) are found.

O resultado não exibe saída. Alguém sabe por quê? Eu notei que este achado não tinha testes, já que cláusula "-exec" são ações e não testes (uma ação pode ser um teste também?). e como "-ou" tem precedência menor do que "-e" implícito entre o último "-exec" e "-print", a lógica expressa na linha de comando não parece ser o que se pretendia ser.

>uname -r
 2.6.32-131.0.15.el6.x86_64
>pwd
 /var/tmp
>mkdir -p repo/project1
>mkdir -p repo/gnu/project2
>mkdir -p repo/gnu/project3/src
>mkdir -p repo/project4
>touch repo/project1/CVS
>touch repo/gnu/project2/.svn
>touch repo/gnu/project3/.svn
>touch repo/gnu/project3/src/.svn
>touch repo/project4/.git

>find repo
repo
repo/project4
repo/project4/.git
repo/gnu
repo/gnu/project3
repo/gnu/project3/src
repo/gnu/project3/src/.svn
repo/gnu/project3/.svn
repo/gnu/project2
repo/gnu/project2/.svn
repo/project1
repo/project1/CVS

>find repo/ -exec test -d {}/.svn \; -or -exec test -d {}/.git \; -or -exec test -d {}/CVS \; -print -prune
>
    
por techie11 20.03.2016 / 16:10

2 respostas

0

O exemplo é ruim. Está fazendo

find -exec command1 \; -or -exec command2 \; -or -exec command3 \; -print -prune

Qual é o equivalente a

find -exec command1 \; -or -exec command2 \; -or -exec command3 \; -and -print -and -prune

Mas como -and ( -a ) tem uma maior prevalência do que -or ( -o ), os -print e -prune são aplicados apenas a -command3

Relatório de erros

Sobre test . Você está confundindo tests na página man find, que é simplesmente o que eles chamam de grupos específicos de seus operadores, com o teste comando usado acima.

    
por 21.03.2016 / 05:25
0

O que o homem encontrar escreve sobre exec na primeira sentença deve responder à sua pergunta:

   -exec command ;
          Execute command; **true if 0 status** is returned.
    
por 20.03.2016 / 16:40

Tags