Lisää
Miten silmukoida hakemistossa olevien tiedostojen yli ja muuttaa polkua ja lisätä tiedostonimeen jälkiliite?
Minun on kirjoitettava skripti, joka käynnistää ohjelmani eri argumenteilla, mutta olen uusi Bashissa. Käynnistän ohjelmani seuraavalla komennolla:
./MyProgram.exe Data/data1.txt [Logs/data1_Log.txt]
.
Tässä on pseudokoodi siitä, mitä haluan tehdä:
for each filename in /Data do
for int i = 0, i = 3, i++
./MyProgram.exe Data/filename.txt Logs/filename_Log{i}.txt
end for
end for
Joten olen todella ymmälläni, miten luoda toinen argumentti ensimmäisestä, jotta se näyttää dataABCD_Log1.txt ja käynnistää ohjelmani.
511
3
Pari huomautusta ensin: kun käytät argumenttina
Data/data1.txt
, pitäisikö sen oikeasti olla/Data/data1.txt
(etummaisen vinoviivan kanssa)? Pitäisikö ulomman silmukan skannata vain .txt-tiedostot vai kaikki tiedostot /Data-kansiossa? Tässä on vastaus, jossa oletetaan/Data/data1.txt
ja vain .txt-tiedostot:Anteeksi, että necromancing säiettä, mutta aina kun iteroida yli tiedostoja globbing, se's hyvä käytäntö välttää kulmatapaus, jossa glob ei täsmää (mikä tekee silmukka muuttuja laajentaa (un-matching) glob kuvio merkkijono itse).
Esimerkiksi:
Viite: Bash Pitfalls
name=${tiedosto##*/}
-korvaus (shell parameter expansion) poistaa johtavan polunnimen viimeiseen/
asti.Korvaus
base=${nimi%.txt}
poistaa perässä olevan.txt
. Se'on hieman hankalampaa, jos laajennukset voivat vaihdella.