Bucle a través de directorios recursivamente en Bash
- Bucle a través de directorios recursivamente en Bash
- Recorra el directorio recursivamente para obtener los archivos con una extensión particular
- Recorra el directorio recursivamente para mover el archivo a otro directorio
- Recorra el directorio recursivamente para eliminar los archivos
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:
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.
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'
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:
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