Incapaz de entender os manuais de 'procura' Unix 'completamente

2

Acho difícil encontrar a sinopse do manual do Find texto alternativo http://files.getdropbox.com/u/175564/syntax_manual.png

Vamos supor que você esteja encontrando diretórios com 777 permissões. A sugestão do Pixelbeat é

find -type d ! -perm -777

Meu OS / X fornece o seguinte

find: illegal option -- t
find: illegal option -- y
find: illegal option -- p
find: illegal option -- e
find: d: No such file or directory

Coisas sobre as quais não tenho certeza ao usar a sinopse como uma ajuda

  • não é possível ver onde colocar a opção -type : posso testar claramente isso, mas quero aprender a ler melhor os manuais de modo a não precisar de ajuda.
  • incapaz de entender por que precisamos de duas linhas para sinopse : parece enfatizar que muitos PATHs são opcionais
  • por que o Pixelbeat usa um ponto de exclamação no comando?

Vamos dar outro exemplo do manual do Grep.

texto alternativo http://files.getdropbox.com/u/175564/grep_manual.png

Ele tem uma sinopse clara, embora eu usasse apenas uma linha para isso. Eu posso ver diretamente que podemos grep por

grep -r "masi" .

Como você lê manuais semelhantes ao manual do Find?

    
por Léo Léopold Hertz 준영 01.07.2009 / 20:07

5 respostas

11

A primeira coisa a perceber é que nem todos os comandos find são criados iguais. O achado que você encontrará em um sistema Linux é diferente do que você terá em um sistema baseado em BSD como o OSX. A referência que você está fazendo é para o Linux.

Para o comando find, a opção '-type' é uma expressão e deve estar após o caminho. Se você ler mais abaixo na página man, ele descreverá quais opções são expressões.

O ponto de exclamação é para negação. Isso é que retorna tudo, exceto coisas com permissões de 777.

O comando " find -type d! -perm -777 " é inválido porque você não incluiu um caminho antes da expressão. Você pode usar um caminho de . se quiser o diretório atual.

Voltar para a questão principal. Às vezes, ler apenas o resumo da man page não é suficiente e você realmente precisa ler o resto. Alguns comandos são tão poderosos que você não será capaz de ter uma boa idéia de como usar o comando, a menos que você leia ou pelo menos leia todo o documento. Também é útil verificar os exemplos se eles estiverem presentes ou, se não estiverem presentes, ficar online e procurar alguns exemplos.

    
por 01.07.2009 / 20:13
5

Você não especificou o diretório

find . -type d ! -perm -777

A página de manual que você citou afirma que nome do caminho deve vir antes expressão . Então, neste caso, um ponto "." vem antes de " -type d ... ". Estes últimos não são opções em si. De fato, -type e -perm são partes da expressão booleana que encontram tentativas para avaliar cada arquivo.

    
por 01.07.2009 / 20:16
3

não é possível ver onde colocar a opção -type

-type não é uma opção, é uma expressão. Então vem no final da lista de argumentos. Se você rolar a página man, você encontrará uma seção intitulada expressões que detalha todas as opções disponíveis para este argumento.

incapaz de entender por que precisamos de duas linhas para sinopse: parece enfatizar que muitos PATHs são opcionais

O programa pode ser chamado com o argumento pathname ou -f pathname . Como regra geral, quaisquer argumentos dentro de colchetes são opcionais. Mas aqueles que não são, são obrigatórios. É por isso que seu comando find não funciona - porque tem "expressões" antes de qualquer "caminho". Os pontos indicam que, opcionalmente, mais de um argumento de caminho pode ser usado.

por que o Pixelbeat usa um ponto de exclamação no comando?

Não consigo ver o comando especificado no link que você forneceu. Mas ..

O caractere de exclamação pode ser usado para negar uma expressão a seguir. Portanto, o comando find . -type d encontrará diretórios e find . ! -type d encontrará tudo, exceto diretórios. É aconselhável escapar do ponto de exclamação com uma barra invertida anterior, para que o seu shell não o interprete. Também pode ser trocado com -not .

    
por 01.07.2009 / 20:43
1

Nas sinopses, os itens incluídos entre colchetes são opcionais e as alternativas são separadas por um caractere de duto (barra vertical). Se as alternativas forem opcionais, elas aparecerão em colchetes duplos separados por tubos. Argumentos obrigatórios aparecem sem colchetes. Argumentos que podem ser repetidos são seguidos por elipses ( ... ).

Às vezes, a sinopse seria muito complicada para entrar em colapso em uma linha. Além disso, às vezes, o resultado de uma versão é significativamente diferente do outro ou é mutuamente exclusivo. Então, no seu exemplo grep:

grep [OPTIONS] PATTERN [FILE...]

grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

OPTIONS e FILE são opcionais. A primeira versão é a mais comum. A segunda versão é para casos especiais em que ( -e ) você precisa proteger um padrão que começa com menos ou ( -f ) os padrões estão em um arquivo. Como você pode ver, elas diferem da primeira versão mais básica. A sinopse poderia ter sido assim:

grep [OPTIONS] [PATTERN | -e PATTERN | -f FILE] [FILE...]

Mas é mais difícil de ler e isso é apenas um caso simples. Imagine um que seja mais complexo como mount , por exemplo. E, é claro, há man páginas sem sinopses porque seria quase impossível (por exemplo, bash ).

Quando leio uma página man , procuro por uma sinopse que parece mais próxima do que estou procurando. Se um for aparente, então eu escaneio ( vgrep ) ou procuro por termos ou palavras-chave da sinopse ou do meu conhecimento do que estou tentando realizar. Eu tenho less definido como meuman reader, então eu uso o comando / para iniciar pesquisas. Às vezes , Eu acho que a documentação de info é mais completa ou útil e eu uso isso de maneira semelhante.

    
por 01.07.2009 / 20:55
0

Sim, a página man do find na minha instalação do Mac OS X é um pouco enganadora. A sinopse lista que as expressões chegam ao final, mas a seção que seria logicamente chamada "EXPRESSÕES" é dividida em duas e intitulada "PRIMÁRIOS" e "OPERADORES". Eu sempre leio as primeiras linhas da "DESCRIÇÃO", portanto, deve-se notar que elas esclarecem essa questão:

DESCRIPTION
     The find utility recursively descends the directory tree for each
     pathname listed, evaluating an expression (composed of the ''primaries''
     and ''operands'' listed below) in terms of each file in the tree.

Isso deve eventualmente indicar que você é estranho, porque os parâmetros não-opcionais iniciados em "-" são expressões que devem ser precedidas por um caminho.

O conselho mais útil que tenho para man pages é aprender os comandos do pager. O padrão parece ser less e aqui você pode usar < para ir para o início > para ir até o final e / ou ? para procurar um padrão para frente ou para trás (como " /-tipo"). Control-f e space avançam uma página e Control-b faz o backup de uma página. Há também xman em que você digitaria Control-s para pesquisar sua página de manual intitulada find . Eu também gosto do comando apropos .

    
por 01.07.2009 / 21:35