encontrar sem recursão


246

É possível usar o findcomando de alguma maneira que ele não recursione nos subdiretórios? Por exemplo,

DirsRoot
  |-->SubDir1
  |    |-OtherFile1
  |-->SubDir2
  |    |-OtherFile2
  |-File1
  |-File2

E o resultado de algo como find DirsRoot --donotrecuourse -type fserá apenas File1, File2?

Respostas:


380

Eu acho que você conseguirá o que deseja com a -maxdepth 1opção, com base na sua estrutura de comando atual. Se não, você pode tentar olhar para a página do homem para find.

Entrada relevante (por conveniência):

-maxdepth levels
          Descend at most levels (a non-negative integer) levels of direc-
          tories below the command line arguments.   `-maxdepth  0'  means
          only  apply the tests and actions to the command line arguments.

Suas opções são basicamente:

find DirsRoot/* -maxdepth 0 -type f #This does not show hidden files

Ou:

find DirsRoot/ -maxdepth 1 -type f #This does show hidden files

Para o exemplo do OP, acho que precisa ser -maxdepth 1?
Paul R

@ Paul R: Na verdade, isso depende de como ele deseja lidar com arquivos ocultos, mas mesmo assim eu alterei minha resposta. Pois o exemplo dele 1é provavelmente o que ele quer.
Eldarerathis 13/10/10

1
Para mim, -maxdepth 0não está mostrando nenhum arquivo, mas -maxdepth 1está funcionando como planejado, com arquivos ocultos sendo exibidos também.
Bruce Wayne

1
@BruceWayne observe o *no find DirsRoot/* -maxdepth 0 -type f. Se você deixar isso de fora, ele não mostrará nenhum arquivo.
mapeters 14/07

@ookook, obrigado, mas não me lembro do contexto original em que tive esse problema, haha.
Bruce Wayne

33

Eu acredito que você está procurando -maxdepth 1.


1
Para o exemplo do OP, acho que precisa ser -maxdepth 1?
Paul R

Sim, se ele estivesse usando o comando exatamente como em seu exemplo, seria 1. Meu erro.
paradoxo waffle

17

Se você procura uma solução compatível com POSIX:

cd DirsRoot && find . -type f -print -o -name . -o -prune

-maxdepth não é uma opção compatível com POSIX.


obrigado por esta solução, mas isso não pode ser simplificado find DirsRoot/* -type f -prune?
Dokaspar 5/05

@dokaspar Realmente ótima pergunta! (você esqueceu de inserir "-o" antes da -prunebtw) A resposta é não, não pode. Para entender completamente por que não pode ser simplificado, basta emitir o set -xcomando antes de emitir o find DirsRoot/* -type f -o -prunee você o verá imediatamente. A causa raiz são as limitações da expansão de DirsRoot/*expressão da shell .
Sqr163 5/05

não está trabalhando em centos, ainda está fazendo recursão total na saída !!!! O comando apropriado éfind . -name . -o -prune
Reishin

no Solaris de qualquer maneira, mantendo DirsRoot como o caminho desejado, você não precisa de cd; em vez disso, você pode: encontrar DirsRoot /. -type f -print -o -name. -o -prune
spioter
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.