Usando Bash Sort para ordenar archivos como un jefe

¿Estás buscando una manera de organizar tus archivos y realizar algunas operaciones sobre ellos? Hay muchas instancias en programación donde necesitas ordenar algunos datos, como una lista de archivos. Ordenar archivos con los comandos sort y ls de Bash te ayudará a mantener las cosas organizadas.

En este tutorial, aprenderás los fundamentos de ordenar archivos y contenidos de archivos.

¡Empecemos a ordenar!

Prerrequisitos

Este tutorial utiliza Ubuntu 20.04, pero cualquier distribución de Linux funcionará.

Ordenar Archivos Alfabéticamente en Bash

Hay muchas formas de ordenar archivos en Linux, pero vamos a centrarnos en la más común, ordenar archivos alfabéticamente.

Abre tu terminal y ejecuta el comando ls -l a continuación para obtener una lista de archivos en un directorio en orden ascendente. La bandera -l le indica al comando ls que imprima la salida devuelta en un formato de lista larga.

ls -l
Bash Sort to Sort Files Alphabetically

Por defecto, el comando ls lista los archivos en orden ascendente. Para invertir el orden de clasificación, pasa la bandera -r al comando ls -l, así: ls -lr. Pasar la bandera -r al comando ls -l se aplica a otros ejemplos en este tutorial.

Usando Bash Sort para Ordenar Archivos por Tamaño

En lugar de ordenar archivos alfabéticamente, es posible que desees ordenar los archivos por tamaño. Ordenar los archivos por tamaño es útil cuando se prioriza ver los archivos más pequeños o más grandes en una lista.

Para ordenar los archivos por tamaño, pasa la bandera -S al comando ls para indicar que ordene la lista de archivos por tamaño.

Ejecuta el siguiente comando para listar archivos (ls) ordenados por tamaño en un formato de lista larga (-lS).

ls -lS

A continuación, puedes ver que el comando ordenó los archivos por tamaño en orden descendente (de mayor a menor tamaño).

Para invertir el orden de clasificación (de menor a mayor), agrega la bandera -r, así: ls -lSr

Sorting Files by Size

Ordenar archivos por tiempo de modificación mediante la ordenación de Bash

Avanzando desde la ordenación de archivos por tamaño, es posible que te encuentres con un caso de uso en el que necesitas ordenar archivos por el momento en que fueron modificados. Por ejemplo, olvidaste el nombre del archivo que creaste y solo recuerdas la hora en que modificaste el archivo.

Ejecuta el siguiente comando donde el parámetro -t indica al comando ls que ordene los archivos por tiempo de modificación.

ls -lt
Sorting Files in a Directory by Modification Time

Ordenar archivos por extensión de archivo

Cuando estás buscando un archivo de un tipo específico, ordenar archivos por extensión de archivo es la solución ideal.

Ejecuta el siguiente comando para listar archivos (ls) en el directorio de trabajo y ordénalos según sus extensiones (-lx).

ls -lX

Observa que el comando ordenó los archivos con la misma extensión en orden ascendente según sus nombres.

Sorting Files by File Extension

Ordenar Contenidos en un Archivo de Texto

Para ahora, has aprendido varios métodos para ordenar los archivos en un directorio. Cambiando tu enfoque desde el comando ls, intenta ejecutar el comando sort. El comando sort ordena el contenido de los archivos dependiendo de la bandera que añadirás. Pero primero, necesitas un archivo con contenido que modificarás.

Ejecuta el siguiente comando para crear un archivo de texto llamado ~/data/frutas.txt que contenga nombres de frutas. La bandera -e habilita la interpretación de la barra invertida para escribir cada palabra en una nueva línea (\n).

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

Ahora ejecuta el siguiente comando para sortear cada palabra en frutas.txt.

sort fruits.txt

A continuación, puedes ver que el contenido del archivo está ordenado en orden ascendente.

Sorting File’s Content Alphabetically in Ascending Order

Sin ninguna bandera, el comando sort ordena el contenido del archivo en orden ascendente por defecto. Para revertir el orden de clasificación, añade la bandera -r al comando sort, así: sort -r frutas.txt. Ordenar en orden inverso añadiendo la bandera -r se aplica a otros ejemplos en este tutorial.

Ordenar una Lista de Números en un Archivo de Texto

El comando para ordenar números es similar a ordenar textos en un archivo, pero añadirás la bandera -n en su lugar. Creemos primero un archivo para demostrar cómo ordenar numéricamente el contenido de un archivo.

Ejecuta el siguiente comando para crear un archivo llamado ~/data/puntuaciones.txt que contenga números aleatorios, cada uno en una nueva línea.

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

Ahora ejecuta el siguiente comando para sortear los números (-n) en el archivo ~/data/puntuaciones.txt.

sort -n scores.txt

A continuación puedes ver los números enumerados en líneas que van desde el número más pequeño al más grande.

Sorting Numbers in a File

Ordenar una lista de números de versión en un archivo de texto

Tal vez tengas una lista de números de versión en un archivo de texto que deseas ordenar. Si es así, agregar la opción --version-sort hará el truco.

Para demostrar cómo funciona la opción --version-sort, primero crea un archivo de texto.

Ejecuta el siguiente comando para crear un archivo de texto llamado ~/data/versions.txt con números de versión aleatorios listados, cada uno en una nueva línea (\n).

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

Ahora ejecuta el siguiente comando para ordenar los números de versión (--version-sort) en el archivo versions.txt. La opción --field-separator le indica al comando sort que los números en cada versión están separados por un punto (.). Puedes cambiar el separador de campo por cualquier carácter que separe los números en las versiones listadas en tu archivo de texto.

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

Bash Sort para encontrar y ordenar archivos por extensión de archivo

Has estado ejecutando comandos individuales (ya sea ls o sort) en los ejemplos anteriores. Pero en programación, a menudo necesitarás usar dos o más comandos juntos. ¿Cómo? Mediante tuberías de un comando a otro.

Ejecuta el siguiente comando para encontrar todos los archivos markdown (-iname "*.md") en el directorio de trabajo (.), y ordénalos en orden alfabético descendente (sort -r). Intenta encontrar y ordenar otros archivos cambiando "*.md" a otra extensión de archivo.

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

Si prefieres guardar la salida ordenada en un archivo de texto en lugar de la salida estándar en la consola, añade la opción --output, así: find . -iname "*.md" | sort -r --output=sorted.txt. La opción --output indica al comando sort que cree un archivo de salida para la lista ordenada de archivos.

Conclusión

El objetivo de este artículo fue enseñarte sobre diferentes formas de ordenar usando comandos Bash en una máquina Linux. Ahora has aprendido a ordenar la lista de archivos y ordenar el contenido de archivos. Además, también deberías saber cómo concatenar diferentes comandos para una clasificación de archivos más compleja.

Con este conocimiento recién adquirido como punto de partida, ¿por qué no crear scripts para automatizar listas de archivos y clasificación de contenido de archivos?

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