O 'find' percorre um diretório se '-not -path “* / FolderName / *”' é usado?

5

Estou usando find "/home/../.." -type f -not -path "*/FolderName/*" para ignorar FolderName está listado. No entanto, eu li que find ainda percorre este FolderName . Procurar por arquivos nesta pasta usando o comando superior não lista nenhum, por isso não tenho certeza se a pasta ainda está sendo percorrida ou não. Diz-se que -prune realmente ignora a pasta, mas não tenho certeza se -prune é realmente necessário?

    
por linuxuser 06.10.2017 / 09:09

2 respostas

5

A -depth (e -delete implica -depth ), -prune , -maxdepth <n> , -depth [+-]<n> , -follow (agora substituída pela opção -L ), -quit ,% co_de Os predicados%, -exit / -xdev (nem todas as implementações suportam todos eles) são os únicos que afetam a passagem do diretório.

Aqui, em vez de

... ! -path '*/whatever/*' ...

Você pode fazer:

... \( ! -name whatever -o -prune \) ...

Ou se você também quiser excluir -mount (que whatever não possui):

... -name whatever -prune -o \( ... \)

Esses teriam que ser inseridos antes de predicados como ! -path '*/whatever/*' .

Isso também evita os problemas pelos quais -type f não corresponde à seqüência de bytes que não se traduzem em caracteres em algumas localidades e em algumas implementações (como o GNU * nas localidades mais comuns).

Então, para o seu exemplo:

find "/home/../.."  \( ! -name FolderName -o -prune \) -type f -print

Ou:

find "/home/../.." -name FolderName -prune -o \( -type f -print \)

(note que ele exclui todos os arquivos chamados find mesmo aqueles que não são do tipo diretório ).

    
por 06.10.2017 / 13:17
3

Sim.

find entrará e percorrerá tudo sob o mesmo caminho, mesmo que o caminho seja filtrado usando -not -path ou ! -path .

Isso ocorre porque o predicado -path não afeta o percurso que find faz. Isso afeta apenas a filtragem dos nomes dos caminhos encontrados.

Para impedir que find desça em um caminho específico, use -prune .

    
por 06.10.2017 / 09:54