find comando no linux

2

Foi-me dito pelo meu amigo que se pode trabalhar com -r opção para encontrar arquivos recursivamente em diretórios e subdiretórios.Por favor me diga o erro na declaração dada que não funciona

find / -type f -r -name "abc.txt"
    
por chinmay 27.09.2013 / 06:05

2 respostas

10

O motivo pelo qual não funciona é porque o find não possui a opção -r . Embora seja verdade que, para muitos programas, o sinal -r significa 'recursivo', não é esse o caso de todos e não é o caso de find . O trabalho de find é procurar por arquivos e diretórios, não é muito frequente que você não queira que seja recursivo.

Você pode verificar as opções da maioria dos programas com o comando man . Por exemplo, man find . Como o manual de busca é enorme, você pode querer procurá-lo pela opção -r :

$ man find | grep -w -- -r

O - apenas diz ao grep para parar as opções de leitura, sem ele, o -r seria passado como uma opção para o grep. Além disso, você pode pesquisar na página do manual pressionando / , em seguida, escrevendo o que deseja pesquisar e, em seguida, digite.

Esse comando não retorna nada, compare com este que procura o manual de cp :

$ man cp | grep -w -- -r
   -R, -r, --recursive

Como find é sempre recursivo, o que ele tem é o inverso, um sinalizador que permite escolher em quantos subdiretórios ele deve ficar:

   -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.

   -mindepth levels
          Do  not apply any tests or actions at levels less than levels (a
          non-negative integer).  -mindepth  1  means  process  all  files
          except the command line arguments.

Portanto, sempre que tiver dúvidas sobre um comando, leia sua man page porque você nunca sabe o que uma determinada opção pode fazer. Por exemplo:

$ man sort | grep -w -- -r
   -r, --reverse
$ man mount | grep -w -- -r,
   -r, --read-only
$ man awk | grep -A 8 -w -- -r
  -r
  --re-interval
          Enable the use of interval  expressions  in  regular  expression
          matching (see Regular Expressions, below).  Interval expressions
          were not traditionally available in the AWK language.  The POSIX
          standard  added them, to make awk and egrep consistent with each
          other.  They are enabled by default, but this option remains for
          use with --traditional.
$ man sed | grep -w -- -r
   -r, --regexp-extended
$ man xterm | grep -w -- -r
   -r      This option indicates that reverse video should be simulated by
           swapping the foreground and background colors. 

Você tem a ideia.

    
por 27.09.2013 / 06:31
8

find já é recursivo, você não precisa do -r

    
por 27.09.2013 / 06:16

Tags