Como buscar arquivos em um diretório via CLI no Linux!

como-buscar-arquivos-em-um-diretorio-via-cli-no-linux

Nos dias atuais o sistema GNU/Linux esta muito mais fácil de se usar pela grande evolução das interfaces gráficas (DE – Desktop Environment) como KDE, Gnome, Xfce, Mate etc, em relação à alguns anos atrás.

Com isso, caso em algum momento seu sistema apresente algum bug que te impossibilite de usar a interface gráfica, o jeito é se virar dentro da tela preta executando comando (CLI – Command Line Interface) em seu ambiente.

Com isso, vamos ver como encontrar arquivos em um diretório via CLI com o comando find, ls e du, podendo ser arquivo com um tamanho relativamente grande ou pequeno.

A sintaxe pode variar de acordo com a distribuição GNU/Linux. Portanto, leia as páginas do manual.

Como encontrar arquivos em um diretório via CLI

Os comandos executados foram em um sistema GNU/Linux Debian. Lembre-se que no Debian os comandos devem ser executados como ROOT. Porém, também saiba que é possível habilitar o sudo no Debian com este tutorial.

Você precisa ficar atento, alguns comandos abaixo estão com o sudo, remova-o da linha de comando após copiar caso utilize o ROOT.

O comando find (search for files in a directory hierarchy)

Segue abaixo o comando find com suas sintaxe para encontrar um tipo de arquivo bastando passar as informações de acordo com sua necessidade.

Terminal
find {/caminho/do/arquivo} -type f -size +{tamanho-do-arquivo-em-kb}k -exec ls -lh {} \; | awk '{ print $5 ": " $9 }'

Um exemplo para encontrar arquivos grandes .iso, maiores que 1 GB (Gigabytes), equivalente a 1048576 kB (Quilobytes) no diretório ~/Downloads/ do usuário.

Terminal
find ~/Downloads/*.iso -type f -size +1048576k -exec ls -lh {} \; | awk '{ print $5 ": " $9 }'
comando find

No comando acima foi combinado o comando find para procurar o arquivo juntamente com o ls para listar o que estamos procurando, no caso arquivo com a extensão “.iso”, fazendo o filtro com o awk para mostrar apenas as colunas com a informação do tamanho do arquivo e o caminho onde se encontra o arquivo.

Para listar todos os arquivos no diretórios ~/Downloads/ventoy-1.0.79/WebUI/static/img/ com menos de 5 b (bytes) de tamanho, execute o comando abaixo.

Terminal
find ~/Downloads/ventoy-1.0.79/WebUI/static/img/ -size -5b
Comando find

Localizando arquivo maior que 100 MB (Megabytes) usando o comando find no diretório /var/log/.

Terminal
sudo find /var/log/ -type f -size +100M
Comando find

Caso queria que mostre outras informações como proprietário, tamanho etc, insira no final do comando a sintaxe para o ls: -exec ls -lh {} \; .

Terminal
sudo find /var/log/ -type f -size +100M -exec ls -lh {} \;
Comando find

O comando ls (list directory contents)

Com o comando ls, também podemos encontrar o menor arquivo em um diretório, combinando com o tail para mostrar as últimas 10 linhas ou com o head as 10 primeiras linhas.

Os parâmetros usados:

  • -l – formato de listagem longa
  • -S – ordena por tamanho de arquivo, o maior primeiro
  • -h – tamanhos de impressão como 1K, 234M, 2G etc
  • -r – ordem inversa durante a ordenação

No comando abaixo, será mostrado as últimas 10 linhas em ordem crescente por tamanho do arquivo com o tail.

Terminal
sudo ls -lShr /var/log | tail -10
Comando ls

Agora será mostrado as primeiras 10 linhas em ordem crescente por tamanho do arquivo com o head.

Terminal
sudo ls -lShr /var/log | head -10
Comando ls

O comando du (estimate file space usage)

Além do comando find e ls, podemos listar os arquivos maiores ou menores com o comando du que estima o uso do espaço no arquivo.

Nos comandos abaixo, combinando com o head e o tail, vamos procurar arquivos que contenha apenas .gz em /var/log/, organizando com o comando sort do menor para o maior.

Terminal
sudo du -csh /var/log/*.gz | sort -h | head -20
Comando du
Terminal
sudo du -csh /var/log/*.gz | sort -h | tail -20
Comando du

Não há um único comando que podemos usar para procurar e listar arquivos grandes ou pequenos, mas os que foi mostrado nesse post ajuda bastante no dia a dia. Então é isso pessoal, até a próxima!