GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo ejecutar todos los scripts en un directorio en Linux

El otro día estuve probando algunos scripts de shell básicos que creé por diversión. Como soy nuevo en los scripts de shell, ejecuté y probé los scripts uno por uno. Estaba bien si solo hay unos pocos guiones. A medida que aumentaba la cantidad de scripts, me costó un poco probarlos todos. Después de un poco de búsqueda en la web, descubrí un par de métodos para ejecutar todos los scripts en un directorio en Linux, uno tras otro.

Ejecutar todos los scripts en un directorio en Linux

Tengo un par de scripts en mi directorio de Documentos.

$ ls Documents/
linux.sh ostechnix.sh script1.sh script2.sh script3.sh script4.sh

Todos ellos son simples scripts de shell de una sola línea que muestran la(s) cadena(s) dada(s) usando el comando "echo" en la salida estándar.

Antes de saber que podemos ejecutar todos los scripts en una carpeta, generalmente haría que el script fuera ejecutable como:

$ chmod +x script.sh

Luego lo ejecuto usando el comando:

$ ./script.sh

O,

$ sh script.sh

Una vez más, hago que el segundo script sea ejecutable y lo ejecuto, y así sucesivamente.

Bueno, hay una mejor manera de hacer esto. Podemos ejecutar todos los scripts en un directorio o ruta usando "run-parts" dominio. El comando run-parts se usa para ejecutar scripts o programas en un directorio o ruta.

$ run-parts <directory-path>

Una desventaja del comando run-parts es que no ejecutará todos los scripts. Funcionará solo si sus scripts tienen los nombres correctos. Los nombres deben constar en su totalidad de letras mayúsculas y minúsculas ASCII, dígitos ASCII, guiones bajos ASCII y guiones negativos ASCII.

Para resolver este problema de nombres, podemos usar regex opción. Por ejemplo, el siguiente comando buscará y ejecutará todos los archivos de script en ~/Documentos directorio que comienza con la letra 's' y termina con 'sh' extensión:

$ run-parts --regex '^s.*sh$' ~/Documents

Ejecute todos los scripts en un directorio en Linux con el comando run-parts

Solución de problemas:

Si se encontró con un error como el siguiente;

run-parts: failed to exec Documents/script1.sh: Exec format error

Consulte la siguiente guía para solucionarlo.

  • Reparar "Error de formato Exec" al ejecutar secuencias de comandos con el comando run-parts

De manera similar, para ejecutar todos los archivos de script que terminan con .sh en el directorio Documentos, ejecute:

$ run-parts --regex '.*sh$' ~/Documents

Para imprimir los nombres de todos los archivos en el directorio Documentos que comienzan con la letra 's' y terminan con la extensión 'sh', ejecute:

$ run-parts --list --regex '^s.*sh$' Documents
Documents/script1.sh
Documents/script2.sh
Documents/script3.sh
Documents/script4.sh

Este comando solo imprimirá el nombre de los archivos de script, pero no los ejecutará.

Para enumerar todos los archivos que terminan en .sh en el directorio Documentos, ejecute:

$ run-parts --list --regex '.*sh$' Documents
Documents/linux.sh
Documents/ostechnix.sh
Documents/script1.sh
Documents/script2.sh
Documents/script3.sh
Documents/script4.sh

El comando run-parts es utilizado principalmente por trabajos cron y no es confiable para el uso manual.

Otra forma de evitar tener que cambiar el nombre de sus secuencias de comandos para que se ajusten a las piezas de ejecución estructura de nombres, puede usar buscar o bucle for comandos.

Para encontrar y ejecutar todos los archivos de script que comienzan con la letra "s" en la carpeta ~/Documentos, ejecute:

$ find ~/Documents -maxdepth 1 -type f -executable -name 's*' -exec {} \;

Si desea ejecutar todas las secuencias de comandos en el directorio dado y todos sus subdirectorios, elimine la profundidad máxima opción en el comando anterior:

$ find ~/Documents -type f -executable -name 's*' -exec {} \;

Para ejecutar todos los scripts que terminan con la extensión ".sh" , ejecuta:

$ find ~/Documents -maxdepth 1 -type f -executable -name '*.sh' -exec {} \;

Encuentre y ejecute todos los scripts en un directorio en Linux usando el comando de búsqueda

Este método también tiene una desventaja menor. Este comando solo puede ejecutar los scripts que puede interpretar su shell actual. Si desea ejecutar todo tipo de scripts, por ejemplo, awk, perl, python, shell scripts, use for loop método como el siguiente.

$ for f in ~/Documents/s* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done

El comando anterior ejecutará los scripts que comienzan con la letra "s" en la carpeta ~/Documentos. Si desea ejecutar todos los archivos que terminan con la extensión ".sh", haga lo siguiente:

$ for f in ~/Documents/*.sh ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done

Para obtener más detalles, consulte las páginas man.

$ man run-parts
$ man find

Espero que esto ayude.


Linux
  1. Cómo actualizar un enlace simbólico de Linux

  2. Cómo crear un directorio compartido para todos los usuarios en Linux

  3. Cómo gzip un directorio en Linux

  4. linux:cómo ejecutar un comando en un directorio dado

  5. ¿Cómo ejecutar Linux en PS3?

Cómo ejecutar comandos de Linux en segundo plano

Cómo contar archivos en el directorio en Linux

Cómo ejecutar Windows 95 en Linux

Cómo configurar SFTP chroot en Linux

Cómo ejecutar comandos de archivo .sh todo a la vez en Linux

Cómo copiar un directorio en Linux