Bucle a través de directorios recursivamente en Bash

Sheeraz Gul 15 febrero 2024
  1. Bucle a través de directorios recursivamente en Bash
  2. Recorra el directorio recursivamente para obtener los archivos con una extensión particular
  3. Recorra el directorio recursivamente para mover el archivo a otro directorio
  4. Recorra el directorio recursivamente para eliminar los archivos
Bucle a través de directorios recursivamente en Bash

Este tutorial demuestra cómo recorrer directorios recursivamente en Bash.

Bucle a través de directorios recursivamente en Bash

A menudo se requiere recorrer directorios mientras se trabaja con diferentes directorios. Podemos usar comandos similares en todos los terminales de Linux, incluido Bash, para recorrer directorios de forma recursiva.

Primero, usamos el comando buscar para ver la estructura del directorio actual. El comando buscar mostrará todos los archivos y carpetas en el directorio actual o dado.

Para ver todos los archivos:

find . -type f -print0

Para ver los archivos de un directorio en particular:

find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -print0

El /mnt/c/Users/Sheeraz/DemoFolder1 es la ruta del directorio que queremos verificar. La estructura de este directorio es la siguiente:

Estructura de directorios

La opción -type f se usa para obtener solo los archivos de ese directorio pero no las carpetas. El resultado de este comando se encuentra a continuación.

/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/demo.bmp/mnt/c/Users/Sheeraz/D

Si también desea obtener las carpetas del directorio, elimine el -tipo f de los comandos anteriores.

find /mnt/c/Users/Sheeraz/DemoFolder1 -print0

Una vez que conocemos la estructura de los nombres de los archivos, usamos el siguiente código para recorrer un directorio de forma recursiva:

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -print0)
do
    echo $x;
done;

El código anterior recorre el directorio /mnt/c/Users/Sheeraz/DemoFolder1 recursivamente y eco el nombre de cada archivo. Vea el resultado de este comando:

/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Example1.java

Recorra el directorio recursivamente para obtener los archivos con una extensión particular

Como podemos ver, no necesitamos mostrar o trabajar con todos los archivos. También podemos usar este comando con la opción -name para obtener los archivos con una extensión particular.

Ver los comandos:

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -name '*.java');
do
    echo $x;
done;

El código anterior solo imprimirá los archivos en /mnt/c/Users/Sheeraz/DemoFolder1 con la extensión .java. Ver la salida:

/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java
/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java
/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java
/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java
/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java
/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Example1.java

Recorra el directorio recursivamente para mover el archivo a otro directorio

También podemos mover los archivos haciendo un bucle recursivo en un directorio usando el comando Bash mv; la sintaxis de este comando se encuentra a continuación.

mv -v $filename $destination directory

Podemos usar este comando en un bucle recursivo para mover los archivos a un directorio de destino. Probemos un ejemplo.

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -name '*.java');
do
    mv -v $x /mnt/c/Users/Sheeraz/DemoFolder2
done;

La DemoFolder2 es un directorio vacío.

Directorio de destino antes de mudarse

Producción :

renamed '/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Delftstack.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Delftstack.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Example1.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Example1.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Delftstack.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Example1.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Example1.java'

Directorio de destino después de la mudanza

Como podemos ver, el comando recorrió recursivamente el directorio y movió los archivos con la extensión java al directorio de destino.

Recorra el directorio recursivamente para eliminar los archivos

Podemos usar el comando rm -rf para eliminar los archivos del directorio dado. La sintaxis de este comando se encuentra a continuación.

rm -rf $filename

Pongamos este comando en un bucle recursivo para eliminar recursivamente todos los archivos del directorio.

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f);
do
    rm -rf $x
done;

El script anterior eliminará todos los archivos del directorio principal y los subdirectorios; no eliminará la carpeta porque solo los archivos están seleccionados en el comando. Ver la salida:

Eliminar archivo del directorio

Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Bash Dictionary