A seção de sinopse da man page para o comando find está errada?

3

Por isso, tenho tentado adquirir o hábito de ver primeiro as man pages antes de começar a pesquisar no Google quando esqueço como executar um determinado comando.

Eu estava olhando para a página man do comando find hoje e na seção synopsis ele especifica o formato do comando como:

SYNOPSIS
       find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

Isso não mostra que as opções devem vir antes do caminho e depois da expressão? Ou uma sinopse não especifica a ordem?

Quando eu uso find embora eu tenha que especificar o caminho antes das opções assim:

find . -cmin -10 -ls
    
por timbram 02.08.2017 / 17:50

2 respostas

6

-cmin e -ls são predicados que fazem parte da expressão , não opções.

Observe que você pode marcar o final das opções com -- , mas os predicados ainda são permitidos depois disso.

Com o GNU find , que permite omitir caminhos :

find -- -L

Reclamaria do desconhecido -L predicado (mesmo que -L seja uma opção válida que realmente tenha um predicado equivalente em -follow ).

É por isso que, enquanto

find "$file"

como

wc "$file"

não funciona corretamente quando $file começa com - .

O wc -- "$file" corrige esse valor para wc (exceto no caso especial de file='-' ), mas não para find -- "$file" . FreeBSD find tem find -f "$file" para isso.

    
por 02.08.2017 / 17:53
3

O comando find é muito antigo, datando de Unix V5 . Na época, as convenções de sintaxe da linha de comando não estavam tão firmemente estabelecidas como estão agora. Alguns programas antigos se desviam dessas convenções.

Originalmente, find não tinha opções. Esperava que o primeiro argumento fosse um diretório para percorrer e os argumentos restantes para ser uma expressão. Avaliar a expressão para cada arquivo indica se esse arquivo deve ser impresso (ou mais geralmente indica o que fazer com o arquivo). A expressão é feita de operadores e seus operandos. Encontrar operadores começam com - (exceto por alguns símbolos de pontuação) pelo mesmo motivo, as opções começam com - : porque ele não tem nenhum significado especial no shell, por isso é fácil de digitar, mas é diferenciável do arquivo nomes porque pessoas razoáveis não iniciam um nome de arquivo com - .

Operadores não são opções. Por quê? Porque eles não têm a sintaxe das opções ... Eles têm a grafia das opções (começando com - ), mas eles são usados em um contexto diferente.

Mais tarde, find adquiriu algumas coisas que poderiam ser consideradas opções - configurações globais como -depth que realmente não têm nenhum negócio na expressão. Estes foram colocados na expressão para consistência, porque find não tinha opções.

Ainda mais tarde, find adquiriu algumas opções, com a sintaxe usual de opções: opções antes de não opções. Isso foi feito para ser consistente com muitos outros programas que suportam as mesmas opções ( -H e -L para configurar o comportamento do symlink).

A sinopse informa que -H , -L e similares podem vir primeiro, depois o (s) caminho (s) e, em seguida, a expressão. A sintaxe da sinopse nem sempre pode expressar todas as possibilidades. Se estivesse completo, seria ilegível, então tudo que você sabe é que isso dá uma possibilidade. Você precisa ler mais se quiser saber exatamente o que é possível e o que não é. Por exemplo, -H , -L , etc. podem chegar em qualquer ordem, desde que estejam antes do caminho.

    
por 03.08.2017 / 03:10