Bash loop gjennom filer i en katalog?

Bash loop gjennom filer i en katalog?

Noen ganger i henhold til våre krav, må vi flytte og sløyfe gjennom alle filene og katalogene i en gitt mappe. La oss anta at vi ønsker å kjøre en spesifikk kommando i hver mappe og fil av en katalog. For det formålet vil vi iterere gjennom alle kataloger ved hjelp av løkker. Bare noen få CLI -verktøy eller kommandolinjeverktøy lar oss kjøre den samme kommandoen for flere filer. Men i vårt tilfelle bruker vi bash shell scripting og bruker til loop for å få fart på enhver kommando vi ønsker å gjøre arbeidet vårt effektivt.

Ikke bare i vårt tilfelle, men looping i hele programmeringen er en veldig effektiv og kraftig tilnærming og praksis. På grunn av looping kan vi bruke det samme konseptet på flere filer og på en gruppe elementer som bruker minimumsmengden for å få ønsket utgang. For å sløyfe gjennom kataloger og filer i bash, bruker vi et globalt mønster som heter “Wild Card” som er et standardmønster som samsvarer med alle filer. Men vi vil bare matche kataloger ved å bruke "/" på slutten av kommandoen vår. Etter det tildeler vi hver katalog Verdien til den tilgjengelige 'Dir' -katalogen. Endelig vil vi bruke Echo -kommandoen for Loop for å løpe gjennom katalogene. Teknisk sett, for å utføre oppgaven, først må vi initialisere en variabel, så tildeler vi datasettet til variabelen som vi vil sløyfe gjennom. I vårt tilfelle sykler det gjennom katalogene ved å bruke '*' Wild Card -tegnet.

Syntaks:

Nedenfor er syntaksen for å sløyfe gjennom katalogene.

for f in/mappe/* mappe/**/*; gjøre
instruksjon
gjort;

I dette bruker vi for -loopen sammen med "F" -variabelen som skal opprettes. Den definerer handlingen som skal utføres hver gang for -loopen blir utført. Etter å ha definert datasettet som det vil gå gjennom, vil vi definere en bane som filene skal hentes eller bare bruke stjerne “*” som lar kompilatoren hente fra den gjeldende katalogen. I vårt tilfelle passerte vi to stier med navnet "Folder" "/mappen/*" vil hente filene i mappen, mens "Folder/**/*" vil hente filene fra undermappene.

Eksempel nr. 1:

Vi vil prøve metoden for å sløyfe gjennom katalogene eller filene for å ha en bedre ide om arbeidet. For det, la oss først sjekke for versjonen av bash vi har akkurat nå fordi versjonen skal oppdateres for å bruke loopen. For å sjekke versjonen av bash vil vi kjøre kommandoen:

linux@linux -virtualbox: ~ $ bash -version

Den vil vise versjonen av bash som for øyeblikket kjører i systemet vårt som vist nedenfor, i vårt system er det “5.0,17 ”.

Nå for å utføre sløyfen, vil vi først opprette en ny katalog i systemet vårt der vi vil legge til noen filer. For å opprette en ny katalog, kjører vi kommandoen:

linux@linux-virtualbox: ~ $ mkdir linux

Etter å ha kjørt kommandoen ovenfor, vil den ikke utføre noe, den vil ganske enkelt overlate terminalen til deg for å kjøre ytterligere kommandoer, som vi kan se nedenfor.

For å sjekke om katalogen vår er opprettet eller ikke, vil vi gå til filene i systemet vårt og deretter flytte inne i hjemmekatalogen, kan du se mappen som heter "Linux" opprettet. Ett spørsmål kan oppstå i tankene dine hvorfor vi sjekker etter mappen i hjemmekatalogen? Dette er bare fordi vi ikke har gitt noen vei til det, det er derfor det alltid oppretter nye mapper eller filer som standard i hjemmekatalogen.

Nå må vi opprette filer i Linux -katalogen for at vi først vil flytte inn i Linux -katalogen vår ved å bruke kommandoen “CD” som vist nedenfor:

Linux@Linux-VirtualBox: ~ $ CD Linux

Etter å ha kjørt kommandoen vår terminal, vil den se slik ut.

Ved å bruke “Echo” -kommandoen, oppretter vi en ny fil med litt dummy -tekst i den ved å kjøre følgende kommando:

linux@linux-virtualbox: ~/linux $ ekko “Min nye fil 1”> myfile_a.tekst
linux@linux-virtualbox: ~ /linux $ ekko “Min nye fil 1”> myfile_b.tekst
linux@linux-virtualbox: ~ /linux $ ekko “Min nye fil 1”> myfile_c.tekst
linux@linux-virtualbox: ~ /linux $ ekko “Min nye fil 1”> myfile_d.tekst

Vi har laget 4 filer i Linux -katalogen vår som navngir dem “myfile_a”, “myfile_b”,

“Myfile_c”, og “myfile_d”, som vi kan se i utdraget nedenfor. Det er flere måter å lage nye filer som å bruke Nano Text Editor, bruke CAT -kommandoen, bruke Touch -kommandoen og mange flere. Det er ikke obligatorisk å alltid bruke ekko, du kan bruke hvilken som helst kommando du vil.

Når vi har laget filene våre, er det på tide å verve alle filer som bruker for loop. For å utføre dette vil vi kjøre en annen kommando.

linux@linux-virtualbox: ~ /linux $ for f in *; gjør ekko $ f; Ferdig

I kommandoen over opprettet vi en variabel “F” som vil definere handlingen som vil bli tatt på utførelsen av løkken. I vårt tilfelle viser vi filnavnene som er lagret i Linux -katalogen som vi kan se i utdraget nedenfor.

Ved å bruke kommandoen over har vi vist filnavnene som er lagret i Linux -katalogen. La oss anta at vi ønsker å vise innholdet sammen med filnavnet, det kan også gjøres ved hjelp av Loop i stedet for å skrive Echo -kommandoen igjen og igjen.

linux@linux-virtualbox: ~ /linux $ for f in *; gjør ekko $ f; Ferdig

Som vist nedenfor vises innholdet i alle filer nedenfor atskilt med den nye linjen. I kommandoen over opprettet vi en variabel “F” det er ikke nødvendig å lage den samme variabelen. Du kan opprette hvilken som helst variabel i henhold til ditt behov, det er ikke obligatorisk å bruke “F”.

Konklusjon

I dag studerte vi looping gjennom katalogene, introduserte vi deg for forsløyfen som brukes til å hente filer fra kataloger og også med dets verk. Vi forklarte deg metoden for å bruke "For Loop" for å hente katalogene ved å bruke et enkelt eksempel der vi først opprettet en ny katalog og filer, så fikk vi ganske enkelt tilgang til dem ved å bruke "For Loop".