Use variáveis no comando find

3

mount |awk '{print $3}' - > lista de pontos de montagem

find "list of mount points"  -name  "aaa" -print

Como posso redirecionar o resultado da linha anterior para o comando find como diretório de pesquisa?

Eu gostaria de tê-lo feito em uma linha:

mount |awk '{print $3}' | find "converting pipe result to a variable as directory" -name "aaa" -print

É possível que funcione assim?

    
por user29946 08.01.2013 / 21:49

2 respostas

3

Possible to make it work this way?

Sim, com xargs :

mount |awk '{print $3}' | xargs -I {} find {} -name "aaa" -print

Você pode até fazer com que ele pesquise seus discos rígidos em paralelo, se você adicionar -P n após xargs para o máximo de n processos simultâneos (esta é uma extensão GNU).

    
por 08.01.2013 / 21:54
2

Você está procurando a substituição de comandos : substitua a saída de um comando por uma linha de comando.

find $(mount |awk '{print $3}') -name "aaa" -print

Isso só funciona se os pontos de montagem não contiverem nenhum espaço em branco ou *?\[ . Essa restrição raramente é um problema para pontos de montagem (mas certifique-se de que você não tenha pontos de montagem com caracteres de espaço - o comando awk não os analisaria corretamente de qualquer maneira).

Você precisa dizer a find para não atravessar os pontos de montagem, caso contrário find / já percorre todo o seu sistema. Passe a opção -xdev .

find $(mount |awk '{print $3}') -xdev -name "aaa" -print

Note que você provavelmente não deve executar find em todos os sistemas de arquivos montados, já que existem sistemas de arquivos para uso interno do sistema que podem ser muito grandes e conter muitos arquivos que você não tem permissão para ler mensagens de erro). Em vez de obter a lista de sistemas de arquivos em mount , obtenha-a em df , que omite alguns desses sistemas de arquivos.

find $(df -P |awk 'NR != 1 {print $6}') -xdev -name "aaa" -print
    
por 09.01.2013 / 01:45

Tags