Por que encontrar. -maxdepth 1 com a opção -a / flag não retorna nenhum resultado no Linux?

1

Eu gostaria de encontrar todos os arquivos png AND jpg e usei o seguinte comando e nenhum resultado será retornado, no entanto, se eu substituir -a por -o , ele mostrará a lista de arquivos. Por que isso?

'find . -maxdepth 1 \( -iname \*\.png -a -iname \*\.jpg \)
    
por PeanutsMonkey 14.01.2013 / 10:21

2 respostas

2

Um erro lógico. O que você está dizendo find é:

find, in this folder, all files that are (PNG and JPG)

Mas, é claro, não há arquivos ambos ao mesmo tempo, e é por isso que o -o funciona:

find, in this folder, all files that are (PNG or JPG)

Ao construir essas consultas, imagine find passando cada arquivo para o teste. Em seguida, aplique lógica booleana . Então, por exemplo:

  • Ele encontra um arquivo .txt. Não é um PNG (falso) e não é um JPG (falso), portanto false & & false é igual a falso

  • Encontra um arquivo .png. É um PNG (true) e não um JPG (false), então true & & false é igual a falso

  • Encontra um arquivo .jpg. Não é um PNG (falso) e é um JPG (verdadeiro), então false & & true é igual a falso

  • Se você usar a opção -o e encontrar um arquivo .png, será um PNG (true) e não é um JPG (false), então true || false é igual a verdadeiro.

por 14.01.2013 / 10:32
2

-a é um AND lógico, o que significa que o nome do arquivo deve terminar em ambos .PNG e .JPG para serem verdadeiros.

-o é um OR inclusivo lógico que significa que o nome do arquivo deve terminar em .PNG ou .JPG (ou ambos) para ser verdadeiro.

    
por 14.01.2013 / 10:38

Tags