Linux Type e Which Para Localizar Path de Comandos e Executáveis

type -a bash
type -a zsh
type -a git
type -a asdf

which bash
which zsh
which git

Olha só que legal! Em algumas situações precisamos descobri o PATH de alguns comandos, pacotes ou programas instalados no seu sistema operacional.

Antigamente eu costumava fazer isso com o locate ou find, mas o resultado nem sempre era fácil de obter com estes dois recursos.

Recentemente eu estava configurando vários pacotes no meu Arch Linux Desktop e tive que encontrar o path de um aplicativo para poder configurar corretamente. Foi aí que me deparei com estes dois recursos mais modernos e mais fáceis de usar.

O type funcionou perfeitamente com os vários pacotes incluindo o asdf. Já o which falhou com o asdf não sei exatamente o porquê.

Na dúvida, vai de type… mas o which também manda bem pra caramba!

SHELL Bash Remover Arquivos Selecionados com Find -exec

find folder -type f -name '*.txt' -exec rm {} +

Para quem tem de lidar com arquivos físicos em sua rotina diária eu tenho certeza de que em algum momento já precisou fazer um eliminação de determinados arquivos, arquivos estes misturados com outros milhares de arquivos, e ainda espalhados por diversos subdiretórios que você nem sequer pudesse imaginar onde estariam.

Bom, não é mais a minha rotina, mas um dia já precisei fazer este tipo de limpeza antes de entregar um deploy; Eu precisei limpar arquivos que não faziam parte do codebase do sistema, arquivos tipo teste e upload… daí bateu aquele frio na espinha!

Dei bastante sorte, numa rápida pesquisa um desses caras legais que ficam escrevendo dicas na internet escreveu um artigo que resolvia exatamente o meu problema. Então, explicando o comando acima:

O comando find vai buscar no diretório folder todos os elementos do tipo arquivo -type f cujo nome faça match com a extensão texto -name ‘*.txt’ e mais que isso, a busca na verdade vai ser processada de forma recursiva descendo até o último nível de diretório existente, já que um nível máximo -maxdepth não foi estipulado.

A remoção dos arquivos encontrados é processada com a opção de executar -exec um comando shell rm para remoção. O sinal de mais + ao final do comando é uma exigência da sintaxe para esta construção.

A mágica na verdade acontece nos brackets {} onde o mesmo é substituído por todas as ocorrências encontradas pelo comando find.

Pronto, sua remoção foi processada de forma limpa e segura!

Você poderia abusar ainda mais das opções de busca, no caso poderia informar as negativas, ou seja, apenas o conjunto de arquivos que não deseja remover.

find folder -type f '!' -name '*.css' '!' -name '*.js' '!' -name '*.php' -exec rm {} +

Segue abaixo uma sketch para montar um ambiente de testes para exercitar os comandos e poder remover os arquivos com segurança.

mkdir folder
mkdir folder/bkp

touch folder/one.txt
touch folder/two.txt
touch folder/three.csv
touch folder/four.txt

cp folder/*.* folder/bkp
touch folder/bkp/six.txt 

Aqui os comandos sem a remoção para você entender o comando find um pouco melhor. Tente variar as combinações de busca para ver o comportamento.

find folder -type f -name '*.txt'

find folder -type f '!' -name '*.css' '!' -name '*.js' '!' -name '*.php'

Agora você já sabe, ao invés de tentar aquele comando cujo nome não pode ser pronunciado (rm -r), agora você conhece uma opção muito mais segura. Se não for usá-la, é por sua conta e risco!