Usando locate para encontrar apenas diretórios contendo a string “foo”

3

É possível usar o comando locate para localizar apenas diretórios? Para reformular, desejo pesquisar um diretório e excluir qualquer resultado que não seja um diretório, como arquivos ou links simbólicos para arquivos.

Embora não seja necessário, gostaria que a solução também retornasse links simbólicos para outros diretórios (mas, novamente, não para arquivos).

Por último, gostaria de excluir diretórios no foo, com uma exceção. Se um subdiretório de foo também contiver um subdiretório com um nome contendo foo, prefiro que seja retornado também.

Se os seguintes arquivos e diretórios existirem ...

/home/foo/
/home/foo/foo.txt
/home/foo/someotherdir/
/home/foo/someotherdir/food/
/food/
/var/www/foo -> /home/foo/
/var/www/food -> /home/food/index.html

A saída só conteria ...

/home/foo/
/home/foo/someotherdir/food/
/food/
/var/www/foo -> /home/foo/

Obrigado antecipadamente.

Edit: Obrigado pelas respostas. Eu sou muito deliberado em intitular isso para o comando locate e não find .

    
por Tor 02.03.2012 / 22:08

4 respostas

4

Talvez um pouco complicado mas aqui vem:

locate foo | xargs file -NF '|' |grep '| directory' | sed 's/| directory//g'
    
por 02.03.2012 / 22:49
3

A localização apenas lê os bancos de dados pré-preparados e não o sistema de arquivos.

Usando o find

diretórios contendo foo

find /path -name '*foo*' -type d

links que contêm foo, você precisa ler o link e testar para ver se o destino é um diretório que requer um script

#!/bin/bash
f=$(readlink $1)
if [ -d "$f" ]
then
    echo $1
fi

use isso assim

find /path -name '*foo*' -type l -exec script {} \;
    
por 02.03.2012 / 23:03
2
locate foo | sed 's%/[^/]*$%/%'

Editar: isso apenas exclui todas as informações após a última barra.

    
por 02.03.2012 / 22:21
0

Este vai fazer o trabalho:

locate foo | grep "foo[^/]*/$"

Será muito mais rápido do que as opções find disponíveis, mas com a limitação padrão locate de que pode estar até 24 horas desatualizadas.

    
por 02.03.2012 / 23:59

Tags