Por que está adicionando -prune a este comando find causando impressão de arquivos estranhos?

0

Se eu quiser procurar em todo o sistema de arquivos por um arquivo com o nome bash , eu posso executar o comando

% find / -name "bash" 2> /dev/null

que, no meu sistema, produz

/bin/bash
/etc/apparmor.d/abstractions/bash
/usr/share/doc/bash
/usr/share/lintian/overrides/bash
/usr/share/menu/bash
/rofs/bin/bash
/rofs/etc/apparmor.d/abstractions/bash
/rofs/usr/share/doc/bash
/rofs/usr/share/lintian/overrides/bash
/rofs/usr/share/menu/bash

O que é bom, mas eu sei que existem certos diretórios no sistema onde o arquivo definitivamente é não , então para tornar a busca mais eficiente, eu atualizei o comando para:

% find / \ 
-name "proc" -prune -o \
-name "sys" -prune -o \
-name "run" -prune -o \
-name "bash" \
2> /dev/null

Agora estou obtendo uma tela cheia de arquivos estranhos, por que find está fazendo isso?

encontrar a versão

% find --version
find (GNU findutils) 4.7.0-git
    
por the_velour_fog 05.08.2016 / 04:04

1 resposta

3

Como você não especificou uma ação final, find está tratando isso como se você tivesse feito

find / \( -name .. -prune -o -name .... -o -name bash \) -print

O "-prune" retorna true e imprime esses diretórios. Isso significa todo diretório chamado sys , todo diretório chamado proc e assim por diante. Definitivamente muitos diretórios se você tiver uma fonte de kernel por aí!

por exemplo

/sys
/var/run
/proc
/usr/src/linux-headers-3.16.0-4-amd64/include/config/sys
/usr/src/linux-headers-3.16.0-4-amd64/include/config/keys/debug/proc
/usr/src/linux-headers-3.16.0-4-amd64/include/config/nf/conntrack/proc
/usr/src/linux-headers-3.16.0-4-amd64/include/config/proc

Todos esses são chamados sys ou run ou proc ou ...

A resposta simples é adicionar um -print ao final do seu comando

% find / -name "proc" -prune -o \
-name "sys" -prune -o \
-name "run" -prune -o \
-name "bash" -print \
2> /dev/null

Agora, find somente imprimirá bash entradas

por exemplo

/usr/share/doc/bash
/usr/share/lintian/overrides/bash
/usr/share/menu/bash
/bin/bash
    
por 05.08.2016 / 04:16

Tags