Unix achado comando ajuda

0

Oi alguém pode me ajudar com a seguinte linha:

find . \( -type d ! -name . -prune \) -o -type f -name "*Log*"

Basicamente, ele deve encontrar diretórios onde os arquivos com "Log" em seu nome estejam presentes.

Eu tenho uma estrutura assim:

/logs
  |
  |
  ----folder1
  |       |
  |       |
  |       ---App1LogDate.txt
  |
  ----folder2
  |      |
  |      |
  |      ---App2LogDate.txt
  |
  |
  |--App3LogDate.txt
  |
  |--App4LogDate.txt

Então, dado que eu vou rodar esta linha dentro do diretório / logs, eu devo obter os seguintes resultados:

.
./folder1
./folder2

3 diretórios no total.

    
por Dima 18.08.2011 / 21:09

4 respostas

1

Ligeiramente à esquerda, mas com base na descrição acima, o seguinte deve fazer exatamente o que você deseja:

find . -type f -name "*Log*" -print | sed -E 's/\/[^\/]+$//' | sort | uniq
    
por 18.08.2011 / 21:54
0
find . -name *.Log -print 

Isso fornecerá o caminho completo de todos os arquivos cujo nome termina com Log.

    
por 18.08.2011 / 21:16
0

find . ( -type d ! -name . -prune ) -o -type d -name "Log"

tmp$ ls
App3LogDate.txt  App4LogDate.txt  folder1  folder2
tmp$ ls folder*
folder1:
App1LogDate.txt

folder2:
App2LogDate.txt
tmp$ find . \( -type d ! -name . -prune \) -o -type d -name "*Log*"
./folder2
./folder1
tmp$
    
por 18.08.2011 / 21:25
0

Se você tem o GNU find (como o Linux e muitos outros Unixes modernos), você pode simplesmente usar o incrível operador printf e fazer isso:

find -type f -name '*Log*' -printf '%h\n'

Você provavelmente também deseja canalizar isso por meio de sort -u (ou por meio de sort | uniq , conforme apropriado). Note que algumas implementações UNIX comerciais terão isso instalado como gfind (ou ter um pacote que o instale como tal).

    
por 24.08.2011 / 17:14

Tags