A veces, de acuerdo con nuestros requisitos, necesitamos mover y recorrer todos los archivos y directorios en una carpeta determinada. Supongamos que queremos ejecutar un comando específico en cada carpeta y archivo de un directorio. Para ese propósito, iteraremos a través de todos los directorios utilizando bucles. Solo unas pocas utilidades de CLI o utilidades de línea de comandos nos permiten ejecutar el mismo comando para múltiples archivos. Pero en nuestro caso, usamos script de shell bash y usando para bucle para acelerar cualquier comando que queramos hacer que nuestro trabajo sea eficiente.
No solo en nuestro caso, sino que en bucle en toda la programación es un enfoque y práctica muy eficiente y poderoso. Debido al bucle, podemos aplicar el mismo concepto en múltiples archivos y en un grupo de elementos utilizando la cantidad mínima de código para obtener la salida deseada. Para recorrer directorios y archivos en Bash, utilizamos un patrón global llamado "comodín", que es un patrón estándar que coincide con todos los archivos. Pero coincidiremos solo con directorios usando "/" al final de nuestro comando. Después de eso, asignamos a cada directorio el valor del directorio 'Dir' disponible. Finalmente, usaremos el comando echo para que el bucle se ejecute a través de los directorios. Técnicamente, para realizar la tarea, primero tenemos que inicializar una variable y luego asignamos el conjunto de datos a la variable que queremos recorrer. En nuestro caso, se vuelve en bicicleta a través de los directorios utilizando el carácter de comodín '*'.
Sintaxis:
A continuación se muestra la sintaxis para recorrer los directorios.
para f en/carpeta/* carpeta/**/*; hacer
instrucción
hecho;
En esto, estamos utilizando el bucle for junto con la variable "F" que se creará. Define la acción que se realizará cada vez que se ejecutará el bucle para. Luego, después de definir el conjunto de datos desde el cual pasará, definiremos una ruta desde la cual se deben obtener los archivos o simplemente usar el asterisco "*" que permitirá que el compilador obtenga del directorio actual. En nuestro caso, pasamos dos rutas con el nombre de "carpeta", la "carpeta/*" obtendrá los archivos en la carpeta, mientras que "carpeta/**/*" obtendrá los archivos de sus subcarpetas.
Ejemplo no. 1:
Probaremos el método de recorrer los directorios o archivos para tener una mejor idea de su trabajo. Para eso, verifiquemos primero la versión de la fiesta que tenemos ahora porque la versión debe actualizarse para usar el bucle. Para verificar la versión de Bash ejecutaremos el comando:
linux@linux -virtualbox: ~ $ bash -version
Mostrará la versión del bash que actualmente se ejecuta en nuestro sistema igual que se muestra a continuación, en nuestro sistema, es "5.0,17 ".
Ahora para realizar el bucle, primero crearemos un nuevo directorio en nuestro sistema en el que agregaremos algunos archivos. Para crear un nuevo directorio, ejecutaremos el comando:
linux@linux-virtualbox: ~ $ mkdir linux
Después de ejecutar el comando anterior, no ejecutará nada, simplemente le entregará el terminal para ejecutar más comandos, como podemos ver a continuación.
Ahora, para verificar si nuestro directorio se crea con éxito o no, iremos a los archivos de nuestro sistema y luego avanzaremos dentro del directorio de inicio, puede ver la carpeta llamada "Linux" creada. Puede surgir una pregunta en su mente por qué estamos revisando la carpeta en el directorio de inicio? Esto es solo porque no hemos proporcionado ninguna ruta, es por eso que siempre crea nuevas carpetas o archivos de forma predeterminada en el directorio de inicio.
Ahora, tenemos que crear archivos en el directorio de Linux para que primero nos moveremos a nuestro directorio de Linux usando el comando "CD" como se muestra a continuación:
linux@linux-virtualbox: ~ $ cd Linux
Después de ejecutar el comando de nuestro terminal, se verá así.
Usando el comando "Echo", crearemos un nuevo archivo con algún texto ficticio en él ejecutando el siguiente comando:
linux@linux-virtualbox: ~/linux $ echo “mi nuevo archivo 1”> myfile_a.TXT
linux@linux-virtualbox: ~ /linux $ echo “mi nuevo archivo 1”> myfile_b.TXT
linux@linux-virtualbox: ~ /linux $ echo “mi nuevo archivo 1”> myfile_c.TXT
linux@linux-virtualbox: ~ /linux $ echo “mi nuevo archivo 1”> myfile_d.TXT
Hemos creado 4 archivos en nuestro directorio de Linux nombrándolos "myFile_a", "myFile_B",
"MyFile_C" y "myFile_D", que podemos ver en el fragmento a continuación. Hay múltiples formas de crear archivos nuevos como usar el editor de texto Nano, usar el comando CAT, usar el comando touch y muchos más. No es obligatorio usar siempre Echo, puede usar cualquier comando que desee.
Como hemos creado nuestros archivos, es hora de obtener todos los archivos usando para bucle. Para realizar esto, ejecutaremos otro comando.
linux@linux-virtualbox: ~ /linux $ para f in *; hacer eco $ f; hecho
En el comando anterior, creamos una variable "F" que definirá la acción que se tomará en la ejecución del bucle. En nuestro caso, estamos mostrando los nombres de archivo que se almacenan en el directorio de Linux como podemos ver en el fragmento a continuación.
Al usar el comando anterior, hemos mostrado los nombres de archivo que se almacenan en el directorio de Linux. Supongamos que queremos mostrar el contenido junto con el nombre del archivo, también se puede hacer usando para bucle en lugar de escribir el comando echo una y otra vez.
linux@linux-virtualbox: ~ /linux $ para f in *; hacer eco $ f; hecho
Como se muestra a continuación, el contenido de todos los archivos se muestra a continuación separado por la nueva línea. En el comando anterior, creamos una variable "F", no es necesario crear la misma variable. Puede crear cualquier variable de acuerdo con su necesidad, no es obligatorio usar "F".
Conclusión
Hoy estudiamos el bucle a través de los directorios, le presentamos el bucle for For que se usa para obtener archivos de directorios y también con sus obras. Le explicamos el método para usar "For Loop" para obtener los directorios utilizando un ejemplo simple en el que creamos primero un nuevo directorio y archivos, luego simplemente accedimos a ellos usando "For Loop".