Kirjoittaja Aihe: Kaivataan ongelmaan shell-ratkaisu [RATKAISTU]  (Luettu 1730 kertaa)

vikitus

  • Käyttäjä
  • Viestejä: 69
    • Profiili
Kaivataan ongelmaan shell-ratkaisu [RATKAISTU]
« : 12.03.13 - klo:11.16 »
Halutaan:
1. Tutkia nykyisen sijainnin alahakemistot
2. Mikäli alahakemisto sisältää pom.xml-tiedoston niin käännetään.

Purkasin tämän kahteen osaan, joista molemmat toimivia, mutta nyt ongelma kuinka saada ne yhdistettyä.

kohta 1.
Koodia: [Valitse]
find . -maxdepth 1 -type d -exec echo {} \;
kohta 2.
Koodia: [Valitse]
(cd $subdir_which_may_contain_pom && if [ -f 'pom.xml' ]; then mvn clean install; fi)
Eli tuo ykköskohdan tuloste pitäisi jollain tavalla saada muuttujaan subdir_which_may_contain_pom.
Onko tässä edes mahdollista välittää muuttujia? Onko tämä järkevä lähestymistapa?
« Viimeksi muokattu: 12.03.13 - klo:14.11 kirjoittanut vikitus »

SuperOscar

  • Käyttäjä
  • Viestejä: 3993
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Kaivataan ongelmaan shell-ratkaisu
« Vastaus #1 : 12.03.13 - klo:11.58 »
Jollet alaspäinyhteensopivuudesta piittaa, Bashkin tukee nykyään Zsh-tyylistä jokerimerkkirekursiota:

Koodia: [Valitse]
for f in **/pom.xml; do
    # tee mitä ikinä haluatkin pom.xml-tiedostolle
done

Mutta jos sinun täytyy todella mennä kyseiseen alikansioon, joudut pätkimään $f-muuttujaa:

Koodia: [Valitse]
for f in **/pom.xml; do
    echo ${f%/pom.xml}
done

(Tulostaa kaikki niiden kansioiden nimet, joista löytyy pom.xml.)

Sama findilla ilman **-rekursiota:

Koodia: [Valitse]
for f in $( find . -name pom.xml ); do
    echo ${f%/pom.xml}
done
« Viimeksi muokattu: 12.03.13 - klo:12.06 kirjoittanut SuperOscar »
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11

_Pete_

  • Käyttäjä
  • Viestejä: 1836
  • Fufufuuffuuu
    • Profiili
Vs: Kaivataan ongelmaan shell-ratkaisu
« Vastaus #2 : 12.03.13 - klo:13.14 »
Halutaan:
1. Tutkia nykyisen sijainnin alahakemistot
2. Mikäli alahakemisto sisältää pom.xml-tiedoston niin käännetään.

Purkasin tämän kahteen osaan, joista molemmat toimivia, mutta nyt ongelma kuinka saada ne yhdistettyä.

kohta 1.
Koodia: [Valitse]
find . -maxdepth 1 -type d -exec echo {} \;
kohta 2.
Koodia: [Valitse]
(cd $subdir_which_may_contain_pom && if [ -f 'pom.xml' ]; then mvn clean install; fi)
Eli tuo ykköskohdan tuloste pitäisi jollain tavalla saada muuttujaan subdir_which_may_contain_pom.
Onko tässä edes mahdollista välittää muuttujia? Onko tämä järkevä lähestymistapa?

Tämän pystyy tekemään suoraan maven:llakin. Katso dokumentaatiota "modules" kohdasta.

vikitus

  • Käyttäjä
  • Viestejä: 69
    • Profiili
Vs: Kaivataan ongelmaan shell-ratkaisu
« Vastaus #3 : 12.03.13 - klo:14.05 »

Tämän pystyy tekemään suoraan maven:llakin. Katso dokumentaatiota "modules" kohdasta.


Kyseisessä tapauksessa maven-moduuleilla ei ole keskinäisiä riippuvuussuhteita toisiinsa.

vikitus

  • Käyttäjä
  • Viestejä: 69
    • Profiili
Vs: Kaivataan ongelmaan shell-ratkaisu
« Vastaus #4 : 12.03.13 - klo:14.08 »
Kiitos SuperOscar!

En tiennyt noista asterikseista. Päädyin sinun ja kaverin avustamana seuraavaan...

Koodia: [Valitse]
for a in `ls -1tr **/pom.xml`;do b=`dirname $a`; (cd $b; mvn install;) done