A volte secondo i nostri requisiti, dobbiamo muoverci e girare attraverso tutti i file e le directory in una determinata cartella. Supponiamo di voler eseguire un comando specifico in ogni cartella e file di una directory. A tale scopo, itereremo attraverso tutte le directory usando i loop. Solo poche utilità CLI o utility di comando ci consentono di eseguire lo stesso comando per più file. Ma nel nostro caso, utilizziamo script bash shell e utilizziamo per accelerare qualsiasi comando che vogliamo rendere efficiente il nostro lavoro.
Non solo nel nostro caso, ma il loop nell'intera programmazione è un approccio e una pratica molto efficienti e potenti. A causa del ciclo, possiamo applicare lo stesso concetto su più file e su un gruppo di elementi che utilizzano la quantità minima di codice per ottenere il nostro output desiderato. Per eseguire il loop attraverso directory e file in bash, utilizziamo un modello globale chiamato "wild card" che è un modello standard che corrisponde a tutti i file. Ma abbineremo solo le directory usando "/" alla fine del nostro comando. Successivamente, assegniamo a ciascuna directory il valore della directory "DIR" disponibile. Infine, useremo il comando Echo per il loop per eseguire le directory. Tecnicamente, per eseguire l'attività, prima dobbiamo inizializzare una variabile, quindi assegniamo il set di dati alla variabile che vogliamo passare. Nel nostro caso, scorre attraverso le directory usando il personaggio '*' wild card.
Sintassi:
Di seguito è riportata la sintassi per il loop attraverso le directory.
per f in/cartella/* cartella/**/*; Fare
istruzione
Fatto;
In questo, stiamo usando il ciclo for insieme alla variabile "F" che verrà creata. Definisce l'azione da eseguire ogni volta che verrà eseguito il ciclo. Quindi, dopo aver definito il set di dati da cui passerà, definiremo un percorso da cui i file devono essere recuperati o semplicemente utilizzare l'asterisco "*" che consentirà al compilatore di recuperare dalla directory corrente. Nel nostro caso abbiamo superato due percorsi con il nome "Cartella" la "cartella/*" prenderà i file nella cartella mentre "Cartella/**/*" prenderà i file dalle sue sottocartelle.
Esempio n. 1:
Proveremo il metodo di loop attraverso le directory o i file per avere una migliore idea del suo lavoro. Per questo, consultiamo prima la versione del bash che stiamo avendo in questo momento perché la versione dovrebbe essere aggiornata per utilizzare il loop. Per controllare la versione di Bash eseguiremo il comando:
Linux@linux -virtualbox: ~ $ bash -version
Viene visualizzato la versione della bash che è attualmente in esecuzione nel nostro sistema come mostrato di seguito, nel nostro sistema, è “5.0,17 ".
Ora per eseguire il ciclo, creeremo prima una nuova directory nel nostro sistema in cui aggiungeremo alcuni file. Per creare una nuova directory, eseguiremo il comando:
Linux@linux-virtualbox: ~ $ mkdir Linux
Dopo aver eseguito il comando sopra, non eseguirà nulla, semplicemente consegnerà il terminale per eseguire ulteriori comandi, come possiamo vedere di seguito.
Ora, per verificare se la nostra directory viene creata o meno, andremo ai file nel nostro sistema e quindi sposteremo all'interno della directory home, puoi vedere la cartella denominata "Linux" creata. Una domanda può sorgere nella tua mente perché stiamo controllando la cartella nella directory home? Questo solo perché non abbiamo fornito alcun percorso, ecco perché crea sempre nuove cartelle o file per impostazione predefinita nella Directory Home.
Ora, dobbiamo creare file nella directory Linux per questo ci sposteremo prima nella nostra directory Linux usando il comando "CD" come mostrato di seguito:
Linux@Linux-Virtualbox: ~ $ CD Linux
Dopo aver eseguito il comando il nostro terminale, sembrerà così.
Utilizzando il comando "Echo", creeremo un nuovo file con un po 'di testo fittizio eseguendo il comando seguente:
Linux@Linux-VirtualBox: ~/Linux $ echo “Il mio nuovo file 1”> myfile_a.TXT
Linux@Linux-VirtualBox: ~ /Linux $ echo “Il mio nuovo file 1”> myfile_b.TXT
Linux@Linux-VirtualBox: ~ /Linux $ echo “Il mio nuovo file 1”> myfile_c.TXT
Linux@Linux-VirtualBox: ~ /Linux $ echo “Il mio nuovo file 1”> myfile_d.TXT
Abbiamo creato 4 file nella nostra directory Linux nominandoli "myfile_a", "myfile_b",
"Myfile_c" e "myfile_d", che possiamo vedere nello snippet di seguito. Esistono diversi modi per creare nuovi file come l'utilizzo dell'editor di testo nano, usando il comando CAT, usando il comando touch e molti altri. Non è obbligatorio usare sempre l'eco, puoi usare qualsiasi comando che desideri.
Dato che abbiamo creato i nostri file, è tempo di arruolare tutti i file utilizzando per loop. Per eseguire questo, eseguiremo un altro comando.
linux@linux-virtualbox: ~ /linux $ per f in *; fare eco $ f; Fatto
Nel comando sopra, abbiamo creato una variabile "F" che definirà l'azione che verrà intrapresa sull'esecuzione del loop. Nel nostro caso, stiamo visualizzando i nomi dei file archiviati nella directory Linux come possiamo vedere nello snippet di seguito.
Usando il comando sopra, abbiamo visualizzato i nomi dei file che sono archiviati nella directory Linux. Supponiamo di voler visualizzare il contenuto insieme al nome del file, può anche essere fatto usando per loop invece di scrivere il comando echo ancora e ancora.
linux@linux-virtualbox: ~ /linux $ per f in *; fare eco $ f; Fatto
Come mostrato di seguito, il contenuto di tutti i file viene visualizzato di seguito separati dalla nuova riga. Nel comando sopra, abbiamo creato una variabile "F" non è necessario creare la stessa variabile. È possibile creare qualsiasi variabile in base alla tua necessità, non è obbligatorio usare "F".
Conclusione
Oggi abbiamo studiato il loop attraverso le directory, ti abbiamo introdotto al ciclo for che viene utilizzato per recuperare i file dalle directory e anche con le sue opere. Ti abbiamo spiegato il metodo per usare "per loop" per recuperare le directory usando un semplice esempio in cui abbiamo creato per la prima volta una nuova directory e file, quindi abbiamo semplicemente acceduto loro usando "per loop".