Usando o Bash Sort para Classificar Arquivos Como um Chefe

Você está procurando uma maneira de organizar seus arquivos e realizar algumas operações sobre eles? Existem muitas instâncias na programação em que você precisa classificar alguns dados, como uma lista de arquivos. Classificar arquivos com os comandos sort e ls do Bash ajudará a manter as coisas organizadas.

Neste tutorial, você aprenderá os fundamentos da ordenação de arquivos e conteúdos de arquivos.

Vamos começar a ordenar!

Pré-requisitos

Este tutorial usa o Ubuntu 20.04, mas qualquer distribuição Linux funcionará.

Ordenar Arquivos Alfabeticamente no Bash

Há muitas maneiras de ordenar arquivos no Linux, mas vamos nos concentrar na maneira mais comum, que é ordenar arquivos alfabeticamente.

Inicie seu terminal e execute o comando ls -l abaixo para obter uma lista de arquivos em um diretório em ordem crescente. A bandeira -l informa ao comando ls para imprimir a saída retornada em um formato de lista longa.

ls -l
Bash Sort to Sort Files Alphabetically

Por padrão, o comando ls lista os arquivos em ordem crescente. Para reverter a ordem de classificação, passe a bandeira -r para o comando ls -l, como este: ls -lr. Passar a bandeira -r para o comando ls -l se aplica a outros exemplos neste tutorial.

Usando o Bash Sort para Ordenar Arquivos por Tamanho

Em vez de ordenar os arquivos alfabeticamente, você pode querer ordená-los por tamanho do arquivo. Ordenar os arquivos por tamanho é útil quando se prioriza ver os arquivos menores ou maiores em uma lista.

Para ordenar os arquivos por tamanho, passe a flag -S para dizer ao comando ls para ordenar a lista de arquivos por tamanho do arquivo.

Execute o comando abaixo para listar os arquivos (ls) ordenados por tamanho do arquivo em um formato de lista longa (-lS).

ls -lS

Abaixo, você pode ver que o comando ordenou os arquivos por tamanho em ordem decrescente (do maior para o menor em tamanho).

Para reverter a ordem de classificação (do menor para o maior), adicione a flag -r, assim: ls -lSr

Sorting Files by Size

Ordenar Arquivos por Tempo de Modificação via Ordenação Bash

Avançando a partir da ordenação de arquivos por tamanho, você pode encontrar um caso de uso em que precise ordenar os arquivos pelo tempo em que foram modificados. Por exemplo, você esqueceu o nome do arquivo que criou e só lembra o momento em que modificou o arquivo.

Execute o comando abaixo onde o parâmetro -t diz ao comando ls para ordenar os arquivos por tempo de modificação.

ls -lt
Sorting Files in a Directory by Modification Time

Ordenação de Arquivos por Extensão de Arquivo

Ao procurar por um arquivo com um tipo de arquivo específico, ordenar os arquivos por extensão de arquivo é a solução ideal.

Execute o comando abaixo para listar os arquivos (ls) no diretório de trabalho e ordená-los com base em suas extensões (-lx).

ls -lX

Observe abaixo que o comando ordenou os arquivos com a mesma extensão em ordem ascendente com base em seus nomes.

Sorting Files by File Extension

Ordenando Conteúdos em um Arquivo de Texto

Até agora, você aprendeu vários métodos para classificar os arquivos em um diretório. Mudando seu foco do comando ls, tente executar o comando sort. O comando sort classifica o conteúdo do arquivo dependendo da bandeira que você adicionará. Mas primeiro, você precisa de um arquivo com o conteúdo que você modificará.

Execute o comando abaixo para criar um arquivo de texto chamado ~/data/fruits.txt que contém nomes de frutas. A bandeira -e permite a interpretação da barra invertida para escrever cada palavra em uma nova linha (\n).

echo -e "apple \nmango \nwatermelon \ncherry \norange \nbanana" > fruits.txt

Agora execute o comando abaixo para classificar cada palavra em fruits.txt.

sort fruits.txt

Abaixo, você pode ver o conteúdo do arquivo ordenado em ordem ascendente.

Sorting File’s Content Alphabetically in Ascending Order

Sem nenhuma bandeira, o comando sort classifica o conteúdo do arquivo em ordem ascendente por padrão. Para inverter a ordem de classificação, adicione a bandeira -r ao comando de classificação, assim: sort -r fruits.txt. A classificação em ordem inversa adicionando a bandeira -r se aplica a outros exemplos neste tutorial.

Classificando uma Lista de Números em um Arquivo de Texto

O comando para classificar números é semelhante à classificação de textos em um arquivo, mas você adicionará a bandeira -n em vez disso. Vamos criar um arquivo primeiro para demonstrar como classificar numericamente o conteúdo de um arquivo.

Execute o comando abaixo para criar um arquivo chamado ~/data/scores.txt que contém números aleatórios, cada um em uma nova linha.

echo -e "45 \n69 \n52 \n21 \n3 \n5 \n78" > scores.txt

Agora execute o comando abaixo para classificar os números (-n) no arquivo ~/data/scores.txt.

sort -n scores.txt

Você pode ver abaixo os números listados em linhas, começando do menor para o maior.

Sorting Numbers in a File

Ordenando uma Lista de Números de Versão em um Arquivo de Texto

Talvez você tenha uma lista de números de versão em um arquivo de texto que deseja ordenar. Se for o caso, adicionar a opção --version-sort resolverá o problema.

Para demonstrar como a opção --version-sort funciona, crie primeiro um arquivo de texto.

Execute o comando abaixo para criar um arquivo de texto chamado ~/data/versions.txt com números de versão aleatórios listados, cada um em uma nova linha (\n).

echo -e "1.0.0.1 \n 6.2.1.0 \n4.0.0.2" > versions.txt

Agora execute o comando abaixo para ordenar os números de versão (--version-sort) no arquivo versions.txt. A opção --field-separator informa ao comando sort que os números em cada versão são separados por um ponto (.). Você pode alterar o separador de campo para qualquer caractere que separe os números nas versões listadas no seu arquivo de texto.

sort --version-sort --field-separator=. versions.txt
Sorting Version Numbers from a Text File

Ordenar Arquivos por Extensão usando Bash

Você tem executado comandos únicos (seja ls ou sort) nos exemplos anteriores. Mas na programação, você pode precisar frequentemente usar dois ou mais comandos juntos. Como? Utilizando pipelines para encadear um comando ao outro.

Execute o comando abaixo para encontrar todos os arquivos markdown (-iname "*.md") no diretório de trabalho (.) e ordená-los em ordem alfabética descendente (sort -r). Tente encontrar e ordenar outros arquivos alterando "*.md" para outra extensão de arquivo.

find . -iname "*.md" | sort -r
Finding and Listing Files in Alphabetically Descending Order

Se preferir salvar a saída ordenada em um arquivo de texto em vez de saída padrão no console, adicione a opção --output, assim: find . -iname "*.md" | sort -r --output=sorted.txt. A opção --output diz ao comando sort para criar um arquivo de saída para a lista ordenada de arquivos.

Conclusão

O objetivo deste artigo foi te ensinar sobre diferentes formas de ordenação usando comandos Bash em uma máquina Linux. Agora você aprendeu a ordenar a listagem de arquivos e ordenar o conteúdo de arquivos. Além disso, você também deve saber como encadear diferentes comandos para uma ordenação de arquivos mais complexa.

Com esse conhecimento recém adquirido como um ponto de partida, por que não criar scripts para automatizar listas de arquivos e ordenação de conteúdo de arquivos?

Source:
https://adamtheautomator.com/bash-sort/