Utilizzando Bash Sort per ordinare i file come un esperto

Stai cercando un modo per organizzare i tuoi file e svolgere alcune operazioni su di essi? Ci sono molte istanze nella programmazione in cui è necessario ordinare alcuni dati, come ad esempio una lista di file. Ordinare i file con i comandi sort e ls di Bash ti aiuterà a mantenere le cose organizzate.

In questo tutorial, imparerai i fondamenti dell’ordinamento dei file e dei contenuti dei file.

Cominciamo a ordinare!

Prerequisiti

Questo tutorial utilizza Ubuntu 20.04, ma qualsiasi distribuzione Linux funzionerà.

Ordinare i File Alfabeticamente con Bash

Ci sono tonnellate di modi per ordinare i file in Linux, ma concentriamoci sul modo più comune, ovvero ordinare i file in ordine alfabetico.

Avvia il tuo terminale ed esegui il comando ls -l di seguito per ottenere una lista di file in una directory in ordine crescente. Il flag -l indica al comando ls di stampare l’output restituito in un formato di elenco lungo.

ls -l
Bash Sort to Sort Files Alphabetically

Per impostazione predefinita, il comando ls elenca i file in ordine crescente. Per invertire l’ordine di ordinamento, passa il flag -r al comando ls -l, in questo modo: ls -lr. Passare il flag -r al comando ls -l si applica agli altri esempi in questo tutorial.

Usare Bash Sort per Ordinare i File per Dimensione

Invece di ordinare i file in ordine alfabetico, potresti volerli ordinare in base alla dimensione del file. Ordinare i file per dimensione è utile quando si vuole dare priorità alla visualizzazione dei file più piccoli o più grandi in una lista.

Per ordinare i file per dimensione, passa il flag -S al comando ls per ordinare la lista dei file in base alla dimensione del file.

Esegui il comando seguente per elencare i file (ls) ordinati per dimensione in un formato di lista lunga (-lS).

ls -lS

Qui sotto, puoi vedere che il comando ha ordinato i file per dimensione in ordine decrescente (dal più grande al più piccolo).

Per invertire l’ordine di ordinamento (dal più piccolo al più grande), aggiungi il flag -r, così: ls -lSr

Sorting Files by Size

Ordinare i file in base al tempo di modifica tramite il comando di ordinamento Bash

Procedendo dall’ordinamento dei file per dimensione, potresti trovarvi in una situazione in cui devi ordinare i file in base all’ora in cui sono stati modificati. Ad esempio, hai dimenticato il nome del file che hai creato e ricordi solo l’ora dell’ultima modifica del file.

Esegui il comando seguente, dove il parametro -t dice al comando ls di ordinare i file per tempo di modifica.

ls -lt
Sorting Files in a Directory by Modification Time

Ordinare i file per estensione del file

Quando stai cercando un file con un particolare tipo di file, ordinare i file per estensione del file è la soluzione ideale.

Esegui il comando seguente per elencare i file (ls) nella directory di lavoro e ordinarli in base alle loro estensioni (-lx).

ls -lX

Nota che il comando ha ordinato i file con la stessa estensione in ordine crescente in base ai loro nomi.

Sorting Files by File Extension

Ordinamento dei contenuti in un file di testo

A questo punto, hai imparato vari metodi per ordinare i file in una directory. Spostando il tuo focus dal comando ls, prova a eseguire il comando sort. Il comando sort ordina i contenuti dei file a seconda della bandiera che aggiungerai. Ma prima, hai bisogno di un file con contenuti che modificherai.

Esegui il comando qui sotto per creare un file di testo chiamato ~/data/fruits.txt che contiene nomi di frutta. La bandiera -e abilita l’interpretazione del backslash per scrivere ogni parola su una nuova riga (\n).

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

Ora esegui il comando qui sotto per sortare ogni parola in fruits.txt.

sort fruits.txt

Sotto, puoi vedere che i contenuti del file sono ordinati in ordine ascendente.

Sorting File’s Content Alphabetically in Ascending Order

Senza alcuna bandiera, il comando sort ordina i contenuti del file in ordine ascendente per impostazione predefinita. Per invertire l’ordine di ordinamento, aggiungi la bandiera -r al comando di ordinamento, così: sort -r fruits.txt. L’ordinamento in ordine inverso aggiungendo la bandiera -r si applica ad altri esempi in questo tutorial.

Ordinare un Elenco di Numeri in un File di Testo

Il comando per ordinare i numeri è simile all’ordinamento dei testi in un file, ma aggiungerai la bandiera -n. Creiamo prima un file per mostrare come ordinare numericamente i contenuti di un file.

Esegui il comando qui sotto per creare un file chiamato ~/data/scores.txt che contiene numeri casuali, ognuno su una nuova riga.

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

Ora esegui il comando qui sotto per sortare i numeri (-n) nel file ~/data/scores.txt.

sort -n scores.txt

Puoi vedere qui sotto i numeri elencati in righe che partono dal più piccolo al più grande numero.

Sorting Numbers in a File

Ordinare una lista di numeri di versione in un file di testo

Forse hai una lista di numeri di versione in un file di testo che desideri ordinare. Se è così, aggiungendo l’opzione --version-sort farà al caso tuo.

Per mostrare come funziona l’opzione --version-sort, crea prima un file di testo.

Esegui il comando qui sotto per creare un file di testo chiamato ~/data/versions.txt con numeri di versione casuali elencati, ognuno su una nuova linea (\n).

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

Ora esegui il comando qui sotto per ordinare i numeri di versione (--version-sort) nel file versions.txt. L’opzione --field-separator dice al comando sort che i numeri in ogni versione sono separati da un punto (.). Puoi cambiare il separatore di campo con qualsiasi carattere che separa i numeri nelle versioni elencate nel tuo file di testo.

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

Bash Sort per trovare e ordinare file tramite estensione di file

Hai eseguito singoli comandi (sia ls che sort) negli esempi precedenti. Ma nella programmazione, potresti spesso aver bisogno di utilizzare due o più comandi insieme. Come? Utilizzando il piping di un comando verso un altro.

Esegui il comando seguente per trovare tutti i file markdown (`-iname “*.md”`) nella directory di lavoro (`.`) e ordinarli in ordine alfabetico discendente (`sort -r`). Prova a trovare e ordinare altri file cambiando `*.md` con un’altra estensione di file.

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

Se preferisci salvare l’output ordinato su un file di testo anziché sull’output standard sulla console, aggiungi l’opzione `–output`, così: `find . -iname “*.md” | sort -r –output=sorted.txt`. L’opzione `–output` indica al comando `sort` di creare un file di output per l’elenco ordinato dei file.

Conclusione

Lo scopo di questo articolo era insegnarti diversi modi per ordinare usando comandi Bash su una macchina Linux. Ora hai imparato a ordinare l’elenco dei file e a ordinare i contenuti dei file. Inoltre, dovresti anche sapere come concatenare diversi comandi per un ordinamento di file più complesso.

Con questa nuova conoscenza come punto di partenza, perché non creare script per automatizzare l’elenco dei file e l’ordinamento dei contenuti dei file?

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