Usando o Bash Sort para Ordenar Arquivos como um Chefe

Você está procurando uma maneira de organizar seus arquivos e realizar algumas operações neles? Existem muitas instâncias na programação onde você precisa ordenar alguns dados, como uma lista de arquivos. Ordenar arquivos com os comandos sort e ls do Bash irá ajudá-lo a manter as coisas organizadas.

Neste tutorial, você aprenderá os fundamentos de ordenar arquivos e conteúdo de arquivos.

Vamos começar a ordenar!

Pré-requisitos

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

Ordenando Arquivos Alfabeticamente com Bash

Há várias maneiras de ordenar arquivos no Linux, mas vamos direto para a mais comum, ordenando arquivos alfabeticamente.

Inicie o seu terminal e execute o comando ls -l abaixo para obter uma lista de arquivos em um diretório em ordem crescente. A flag -l diz 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 flag -r para o comando ls -l, assim: ls -lr. Passar a flag -r para o comando ls -l se aplica a outros exemplos neste tutorial.

Usando o Bash para Ordenar Arquivos por Tamanho

Em vez de classificar os arquivos alfabeticamente, você pode querer classificá-los pelo tamanho do arquivo. A classificação por tamanho de arquivo é útil ao priorizar a visualização dos menores ou maiores arquivos em uma lista.

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

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

ls -lS

Abaixo, você pode ver que o comando classificou 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

Classificar Arquivos por Tempo de Modificação usando o comando Bash Sort

Avançando na classificação dos arquivos por tamanho, você pode encontrar um caso de uso em que precise classificar os arquivos pelo tempo em que foram modificados. Por exemplo, você esqueceu o nome do arquivo que criou e só se lembra do momento em que o arquivo foi modificado pela última vez.

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

ls -lt
Sorting Files in a Directory by Modification Time

Classificar Arquivos por Extensão de Arquivo

Quando você está procurando um arquivo com um tipo de arquivo específico, classificar 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 classificar com base em suas extensões (-lx).

ls -lX

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

Sorting Files by File Extension

Classificação de Conteúdo em um Arquivo de Texto

A esta altura, você já aprendeu vários métodos para ordenar os arquivos em um diretório. Mudando seu foco do comando ls, tente executar o comando sort. O comando sort ordena o conteúdo do arquivo dependendo da bandeira que você irá adicionar. Mas primeiro, você precisa de um arquivo com o conteúdo que você vai modificar.

Execute o comando abaixo para criar um arquivo de texto chamado ~/data/frutas.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 sort cada palavra em frutas.txt.

sort fruits.txt

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

Sorting File’s Content Alphabetically in Ascending Order

Sem bandeiras, o comando sort ordena o conteúdo do arquivo em ordem ascendente por padrão. Para inverter a ordem de classificação, adicione a bandeira -r ao comando sort, como este: sort -r frutas.txt. A ordenação em ordem reversa, adicionando a bandeira -r, se aplica a outros exemplos neste tutorial.

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

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

Execute o comando abaixo para criar um arquivo chamado ~/data/pontuacoes.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 sort os números (-n) no arquivo ~/data/pontuacoes.txt.

sort -n scores.txt

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

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 você 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 em seu arquivo de texto.

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

Ordenação Bash para Encontrar e Ordenar Arquivos por Extensão

Você tem executado comandos únicos (ou ls ou sort) nos exemplos anteriores. Mas na programação, você pode precisar frequentemente usar dois ou mais comandos juntos. Como? Através da interligação de um comando com outro.

Execute o comando abaixo para encontrar todos os arquivos markdown (-iname "*.md") no diretório de trabalho (.), e classificá-los em ordem alfabética descendente (sort -r). Tente encontrar e classificar 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 na saída padrão no console, adicione a opção --output, assim: find . -iname "*.md" | sort -r --output=sorted.txt. A opção --output informa ao comando sort para criar um arquivo de saída para a lista ordenada de arquivos.

Conclusão

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

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

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