Configure find para não procurar em diretórios, se maches nome do diretório 2012

1

Estou usando find /home/myid/dir-with100directories/ -mmin -5 -not -path "*/2012/* para encontrar todos os arquivos, exceto no diretório 2012, mas de alguma forma funciona muito devagar.

E o meu palpite é que encontre looks em TODOS os diretórios, mas não mostre / oculte resultados para 2012? Estou correto ou errado?

    
por Maris 06.01.2014 / 16:27

2 respostas

2

Se você quiser excluir um caminho, faça com que ele corresponda corretamente na opção -path . A opção requer que você escreva um caminho totalmente compatível, incluindo o prefixo de caminho absoluto, portanto, apenas /2012/ não é suficiente.

find /home/myid/dir-with100directories/ -mmin -5 \
-not -path '/home/myid/dir-with100directories/2012/*'

Ou:

cd /home/myid/dir-with100directories/
find . -mmin -5 -not -path './2012/*' 

Se você quiser excluir qualquer pasta com o nome 2012 - com o GNU find :

cd /home/myid/dir-with100directories/
find . -regextype posix-extended -not -regex '.*/2012\(/.*\)?'

Ou para remover diretórios com o nome 2012 :

cd /home/myid/dir-with100directories/
find . -type d -and -name '2012' -prune -o -print

O código acima irá imprimir tudo o resto como uma ação (veja aqui para mais informações).

Se você usar o Bash, poderá ignorar um diretório 2012 imediatamente:

shopt -s extlob
find /home/myid/dir-with100directories/!(2012) -mmin -5

A mesma ideia com o Zsh:

setopt extendedglob
find /home/myid/dir-with100directories/^2012 -mmin -5
    
por 06.01.2014 / 16:43
0

Veja a opção -prune na página man do find e um exemplo dado na descrição da opção -path .

    
por 06.01.2014 / 16:39

Tags