GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire tutti gli script in una directory in Linux

L'altro giorno ho testato alcuni script di shell di base che ho creato per divertimento. Dal momento che sono nuovo nello scripting della shell, ho eseguito e testato gli script uno per uno. Era OK se ci sono solo pochi script. Con l'aumento del numero di script, trovo che sia un po' dispendioso in termini di tempo testarli tutti. Dopo un po' di ricerca sul web, ho scoperto un paio di metodi per eseguire tutti gli script in una directory in Linux, uno dopo l'altro.

Esegui tutti gli script in una directory in Linux

Ho un paio di script nella mia directory Documenti.

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

Sono tutti semplici script di shell one-liner che visualizzano le stringhe date usando il comando "echo" nell'output standard.

Prima di sapere che possiamo eseguire tutti gli script in una cartella, di solito rendevo lo script eseguibile come:

$ chmod +x script.sh

Quindi lo eseguo usando il comando:

$ ./script.sh

Oppure,

$ sh script.sh

Ancora una volta, rendo eseguibile il secondo script, lo eseguo e così via.

Bene, c'è un modo migliore per farlo. Possiamo eseguire tutti gli script in una directory o in un percorso utilizzando "run-parts" comando. Il comando run-parts viene utilizzato per eseguire script o programmi in una directory o in un percorso.

$ run-parts <directory-path>

Uno svantaggio del comando run-parts è che non eseguirà tutti gli script. Funzionerà solo se i tuoi script hanno i nomi corretti. I nomi devono essere costituiti interamente da lettere maiuscole e minuscole ASCII, cifre ASCII, caratteri di sottolineatura ASCII e trattini meno ASCII.

Per risolvere questo problema di denominazione, possiamo utilizzare la regex opzione. Ad esempio, il comando seguente troverà ed eseguirà tutti i file di script in ~/Documents directory che inizia con la lettera 's' e termina con l'estensione 'sh':

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

Esegui tutti gli script in una directory in Linux con il comando run-parts

Risoluzione dei problemi:

Se hai riscontrato un errore simile a quello riportato di seguito;

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

Fare riferimento alla seguente guida per risolverlo.

  • Correzione "Errore di formato Exec" durante l'esecuzione di script con il comando run-parts

Allo stesso modo, per eseguire tutti i file di script che terminano con .sh nella directory Documenti, eseguire:

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

Per stampare i nomi di tutti i file nella directory Documenti che iniziano con la lettera 's' e terminano con l'estensione 'sh', eseguire:

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

Questo comando stamperà solo il nome dei file di script, ma non li eseguirà.

Per elencare tutti i file che terminano con .sh nella directory Documenti, esegui:

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

Il comando run-parts viene utilizzato principalmente da cron jobs e non è affidabile per l'utilizzo manuale.

Un altro modo per evitare di dover rinominare i tuoi script per adattarli a run-parts struttura dei nomi, puoi utilizzare trova o ciclo continuo comandi.

Per trovare ed eseguire tutti i file di script che iniziano con la lettera "s" nella cartella ~/Documenti, esegui:

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

Se desideri eseguire tutti gli script nella directory specificata e in tutte le sue sottodirectory, rimuovi maxdepth opzione nel comando precedente:

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

Per eseguire tutti gli script che terminano con l'estensione .sh" , esegui:

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

Trova ed esegui tutti gli script in una directory in Linux usando il comando trova

Questo metodo ha anche un piccolo svantaggio. Questo comando può eseguire solo gli script che possono essere interpretati dalla tua shell corrente. Se vuoi eseguire tutti i tipi di script, ad esempio awk, perl, python, script di shell, usa for loop metodo come di seguito.

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

Il comando precedente eseguirà gli script che iniziano con la lettera "s" nella cartella ~/Documents. Se vuoi eseguire tutti i file che terminano con l'estensione ".sh", esegui:

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

Per maggiori dettagli, fare riferimento alle pagine man.

$ man run-parts
$ man find

Spero che questo aiuti.


Linux
  1. Come elencare tutti i pacchetti installati in Linux

  2. Come rinominare una directory su Linux

  3. Linux:come eseguire un bootloader da Linux?

  4. Come gzippare una directory in Linux

  5. Come ottenere la dimensione della directory in Linux

Come eseguire i comandi Linux in background

Come contare i file nella directory in Linux

Come eseguire Windows 95 su Linux

Come configurare SFTP in chroot in Linux

Come eseguire i comandi del file .sh tutto in una volta in Linux

Come copiare la directory su Linux