Talvez um pouco complicado mas aqui vem:
locate foo | xargs file -NF '|' |grep '| directory' | sed 's/| directory//g'
É 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
.
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 {} \;
locate foo | sed 's%/[^/]*$%/%'
Editar: isso apenas exclui todas as informações após a última barra.
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.
Tags linux