The Bash for Loop
Per ottenere un ciclo ricorsivo attraverso le directory, useremo i loop bash, in particolare per un loop.
Il loop è un tipo comune di loop in Bash e in altri linguaggi di programmazione. Itera su un determinato elenco di elementi/opzioni fino a quando e esegue una serie di comandi.
La sintassi generale per il comando per loop è:
per me in elenco
Fare
[COMANDO]
Fatto;
Ecco un esempio di un ciclo bash è:
#/bin/bash
per i in 0… 10
Fare
echo '$'
Fatto
Il loop di cui sopra stampa i valori da 0 a 10.
Input dell'utente Bash
Successivamente, dobbiamo richiedere all'utente una directory valida. Per accettare l'input dell'utente, utilizziamo il comando Echo in bash.
Per esempio:
#!/Bin/Bash
Echo "Inserisci la directory"
Leggi Dir
CD $ dir
echo "ora in /ecc"
Sposta file (script bash)
Con i concetti di loop e input dell'utente fuori mano, possiamo mettere insieme la nostra shell. La prima operazione è quella di trovare i file in modo ricorsivo con estensioni specifiche e spostarli.
Ecco uno script di esempio per questo:
#/bin/bash
Echo "ENTRA DIR"
Leggi Dir
Echo "Inserisci la destinazione"
Leggi dest
Per i in $ (trova $ dir -name '*.tronco d'albero');
Fare
mv -v $ i $ dest
Fatto;
Lo script chiederà all'utente una directory e quindi cercherà un'estensione specifica. Sposterà quindi i file nella destinazione specificata.
Cancella file
Lo script sopra può anche essere modificato per eliminare i file invece di spostarli. Un esempio è come
#/bin/bash
Echo "Enter Dir"
Leggi Dir
Per i in $ (trova $ dir -name '*.tronco d'albero');
Fare
rm -rf $ i
Fatto;
File di stampa
Per stampare i file in una directory, utilizzare lo script come:
#/bin/bash
Echo "ENTRA DIR"
Leggi Dir
CD $ dir
Per I in $ (trova $ dir -type f);
Fare
echo $ i;
Fatto;
Conclusione
Quanto sopra sono gli script di esempio che è possibile utilizzare per loop directory ed eseguire un'azione specifica. È bene notare che ci sono strumenti sviluppati per eseguire tali attività, ma uno script è un buon modo per andare se non riesci a trovare uno strumento appropriato.