Domine o comando `fd` no Linux: Guia completo para iniciantes e experts

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.