localiza arquivos com o caminho de um diretório exclui subdiretórios

3

Como posso usar find para percorrer um diretório, mas não recursivo em seus subdiretórios?

Eu tentei -prune e isso não funciona. E não há -maxdepth opção.

find /opt/projectname/bin -type f /opt/projectname/bin -prune -o -print
find: missing conjunction
/opt/projectname/bin/file_1_is_printed
/opt/projectname/bin/file_2_is_printed
/opt/projectname/bin/directory_within_bin/some_file_should_not_be_printed
/opt/projectname/bin/directory_2_within_bin/some_file_2_should_not_be_printed

/usr/bin/find:
         find.c $Date: 2011/08/12 15:04:36 $Revision: r11.31/4 PATCH_11.31 (PHCO_42158)
         libcpio.c $Date: 2008/05/27 16:08:10 $Revision: r11.31/2 PATCH_11.31 (PHCO_36666)
         $Revision: @(#) find R11.31_BL2011_0923_2 PATCH_11.31 PHCO_42158

Esta pergunta não é uma pergunta repetida. Não há GNU aqui. Embora a questão possa ser uma pergunta repetida, as respostas postadas nessas questões pedem instalações de ferramentas GNU. Por isso, se as respostas aqui ajudarem a resolver, este é um tópico único.

    
por user3146086 16.03.2015 / 19:13

3 respostas

1

O erro "falta de conjunção" é porque você repetiu o nome do diretório após -type f , e find não sabe como analisar isso.

Para evitar a passagem de subdiretórios, você precisa remover diretórios, não arquivos regulares. No entanto, você não deve remover o diretório inicial, caso contrário, find não processará nada além disso. Uma maneira fácil de reconhecer o diretório inicial é organizar seu nome como . .

find /opt/projectname/bin/. -name . -o -type d -prune -o -print

Explicação:

  • -name . - se o nome for . , [não fazer nada]
  • caso contrário: -type d - se o arquivo for um diretório, não entre nele
  • caso contrário: imprima o caminho
por 17.03.2015 / 02:27
1

Assumindo que o comando find na pergunta é realmente o que você digitou, você misturou ações com as raízes de pesquisa de diretório, levando à mensagem de erro.

Eu baseei minha sugestão em esta página de manual do HP UX find , que corresponde à sua declaração "no -maxdepth".

Tente esta variante:

find /opt/projectname/bin -path '/opt/projectname/bin/*/*' -prune -o -type f -print

Eu realmente consideraria essa alternativa "mais limpa" se soubesse que não havia arquivos "demais" no diretório, mas pode não ser aceitável para você na sua situação:

find /opt/projectname/bin/* -type f -print -o -prune
    
por 17.03.2015 / 00:52
-1
find ${INP_PATH} -type f -ls | grep -v "${INP_PATH}/.*/"
    
por 17.01.2018 / 23:15

Tags