No universo Linux, o utilitário fd
surge como uma alternativa mais intuitiva ao comando find
. Sua proposta é oferecer uma sintaxe simplificada, adotar padrões de uso mais lógicos e entregar um comportamento mais natural. Vamos explorar juntos como ele funciona.
fd
versus find
: Uma Análise Comparativa
O comando fd
não busca substituir o consagrado find
, cuja presença no Linux remonta a tempos imemoriais. Em vez disso, o fd
visa atender às necessidades mais frequentes dos usuários do find
de forma mais direta e eficaz. E, geralmente, apresenta um desempenho de oito a nove vezes superior ao find
. Para mais detalhes, consulte os benchmarks disponíveis na página do projeto no GitHub.
O fd
destaca-se pela sua saída colorida, similar ao modo de exibição de alguns comandos ls
. Ele realiza buscas recursivas, mas omite diretórios ocultos por padrão. Além disso, integra-se com o Git, ignorando automaticamente os padrões definidos no arquivo “.gitignore”.
Por padrão, o fd
não diferencia maiúsculas de minúsculas nas buscas. Contudo, ao detectar uma letra maiúscula no padrão de busca, ele passa a operar no modo sensível a maiúsculas e minúsculas. Embora seja possível modificar esses padrões, na maioria dos casos, eles se mostram bastante convenientes.
Processo de Instalação do fd
A partir do Ubuntu 19.04 (Disco Dingo), a instalação do fd
pode ser realizada diretamente através do gerenciador de pacotes apt-get
. Caso sua versão do Ubuntu seja anterior, consulte as instruções de instalação no repositório do Git.
Para instalar, execute o seguinte comando:
sudo apt-get install fd-find
No Ubuntu, o comando é identificado como fdfind
para evitar conflitos com outras ferramentas já existentes. Se preferir usar o alias fd
, configure-o da seguinte forma:
alias fd=fdfind
Para que o alias persista entre sessões, adicione-o ao seu arquivo “.bashrc” ou “.bash_aliases”.
Para instalar o fd
no Fedora, utilize o comando:
sudo dfn install fd-find
No Manjaro, o comando é:
sudo pacman -Syu fd
fd
versus fdfind
Para evitar confusões, em nosso sistema de teste Ubuntu, o comando foi deixado com seu nome padrão, fdfind
. Ambos, fd
e fdfind
, correspondem ao mesmo comando. Ao solicitar a versão do fdfind
, você notará que ele se identifica como “fd”:
fdfind --version
Vamos nos referir ao comando como “fd”, mas em nossos exemplos utilizaremos fdfind
, seguindo a convenção do Ubuntu. Em outras distribuições, o atalho “fd” pode ser utilizado.
Realizando Buscas Simples com fd
Quando utilizado sem opções, o fd
opera de forma similar ao ls
, porém, com a inclusão de arquivos em subdiretórios por padrão.
Basta digitar:
fdfind
A saída é apresentada com cores distintas para diferentes tipos de arquivos e diretórios.
Para filtrar por tipo de arquivo, utilize a opção -e
(extensão), sem a necessidade de um ponto inicial (.) e sem sensibilidade a maiúsculas ou minúsculas:
fdfind -e png
A saída agora exibirá apenas arquivos com extensão PNG.
Para buscar um arquivo específico, inclua seu nome na linha de comando:
fdfind index.page
O arquivo será encontrado, mesmo que esteja em um subdiretório, sem a necessidade de especificar a busca recursiva.
Para iniciar a busca em um diretório específico, adicione o caminho do arquivo na linha de comando. O exemplo a seguir busca por arquivos que contenham “passwd” em seu nome dentro do diretório “/etc”:
fdfind passwd /etc
Aqui, buscamos por arquivos de código-fonte C que contenham “coord” no nome:
fdfind -e c coord
Neste caso, dois arquivos correspondentes foram encontrados.
fd
e Integração com o Git
O Git é um sistema de controle de versão de código-fonte amplamente utilizado. Ao usar o Git, é comum empregar arquivos “.gitignore” para definir quais arquivos devem ser rastreados e quais devem ser ignorados. Por padrão, o fd
respeita as configurações desses arquivos.
Em um determinado diretório, temos um repositório Git e um arquivo “.gitignore”. Ao executarmos o comando:
ls -adl .git*
Solicitamos ao fd
que liste arquivos com “coord” no nome. Em seguida, repetimos a busca usando a opção -I
(sem ignorar), instruindo o fd
a desconsiderar as definições no “.gitignore”:
fdfind coord
fdfind coord -I
Os dois arquivos extras no segundo conjunto de resultados são arquivos objeto, gerados durante a compilação. Eles são normalmente ignorados pelo Git e pelo fd
devido a uma entrada no arquivo “.gitignore”.
A opção -I
força o fd
a ignorar o arquivo “.gitignore” e listar todos os arquivos encontrados.
Tipos de Arquivos e Sensibilidade a Maiúsculas e Minúsculas
O fd
permite buscar por diretórios, arquivos (incluindo executáveis e vazios) e links simbólicos. Isso é feito com a opção -t
(tipo), seguida por uma das letras:
f: Arquivo.
d: Diretório.
l: Link simbólico.
x: arquivo executável.
e: arquivo vazio.
O comando abaixo busca um diretório chamado “imagens”:
fdfind -td images
Uma correspondência é encontrada em um subdiretório.
Vamos analisar como a diferenciação de maiúsculas e minúsculas funciona. Ao buscar por arquivos com “geo” e “Geo” em seus nomes, temos:
fdfind -tf geo
fdfind -tf Geo
No primeiro comando, ao usarmos um padrão de busca em minúsculas, o fd
operou de forma insensível a maiúsculas e minúsculas, considerando “Geo” e “geo” como válidos. Já o segundo comando, com um caractere maiúsculo, fez o fd
operar com sensibilidade, resultando em apenas “Geo” como correspondência.
Execução de Comandos com fd
O comando fd
permite executar outros comandos sobre os arquivos encontrados.
Supondo que haja um arquivo compactado em algum lugar, o buscamos com o comando:
fdfinf -e zip
A opção -x
(exec) encaminha cada arquivo encontrado para outro comando. Por exemplo, podemos utilizar o utilitário unzip
para descompactar o arquivo ZIP, usando “{}” como um marcador para o arquivo encontrado:
fdfind -e zip -x unzip {}
Isso descompactará o arquivo no diretório atual. Se quisermos descompactar o arquivo no diretório onde ele se encontra, podemos utilizar os seguintes marcadores:
{}: o caminho completo e o nome do arquivo encontrado.
{/}: o nome do arquivo encontrado.
{//}: o diretório que contém o arquivo encontrado.
{/.}: o nome do arquivo encontrado, sem a extensão.
Para descompactar o arquivo no diretório onde ele se encontra, combinamos a opção unzip -d
(diretório) com o marcador do diretório pai ({//}):
fdfind -e zip -x unzip {} -d {//}
O arquivo ZIP será descompactado no diretório onde ele se encontra.
Conclusão: fd
Seu Novo Comando de Busca?
Pela sua simplicidade e capacidade de atender às necessidades mais comuns, o fd
pode se tornar seu comando de busca preferido. No entanto, se precisar de funcionalidades mais avançadas, o find
continua sendo uma ferramenta valiosa à sua disposição.