Comando find exclui arquivos cujo caminho corresponde a um determinado padrão

1

Eu tenho um comando de busca que procura por arquivos que foram modificados recentemente e gera a data

find /path/on/server -mtime -1 -name '*.js' -exec ls -l {} \;

Eu gostaria que ele excluísse qualquer pasta profundamente aninhada que correspondesse a um determinado padrão. há várias pastas que possuem um diretório "statistics" e diretórios ".svn". Então eu gostaria de poder dizer se o arquivo que foi modificado ontem está em uma pasta chamada statistics, ignore-o. Ou talvez não procure por arquivos nessas pastas.

    
por user40570 06.07.2012 / 19:48

2 respostas

1

Você pode usar os parâmetros de linha de comando -path e -prune para fazer isso

find /path/on/server -mtime -1 -o -path '*.svn' -prune -o -path '*statistics' \ 
-prune -o -exec ls -l {} \;

Isso tem a vantagem de não pesquisar os diretórios que você deseja excluir.

Observe também que o ls -l pode não estar fazendo o que você espera, pois listará todo o conteúdo dos diretórios que são passados para ele, assim você obterá alguns arquivos listados várias vezes.

Dos comentários ls -ld seria melhor.

    
por 06.07.2012 / 20:43
0

Use o modificador de negação ! . Por exemplo, como este find /path/on/server -mtime -1 -name '*.js' -o -name '!.svn' -o -name '!statistics' -exec ls -l {} \; .

A pista aqui é -o (significando simplesmente OR) e ' em torno do ponto de exclamação, pois o shell (bash ou similar) usa pontos de exclamação para comandos especiais.

    
por 06.07.2012 / 20:40

Tags