Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: JA5U - 06.09.16 - klo:22.53
-
Moi
Tällaisen rimpsun kirjottelin:
find . -name ".png" -exec convert {} -fuzz 10% -fill black -transparent "#BDBDBD" gray-{} \;
find palauttaa kuitenkin ./filename eikä tuo ./ ilmeisesti kelpaa uuden tiedonston nimeksi.
Kuinka nimen saisi ilman ./ ?
-
Jos kaikki tiedostot ovat yhdessä hakemistossa, onnistuu korvaamalla piste tähdellä:
find * -name "*.png" -exec convert {} -fuzz 10% -fill black -transparent "#BDBDBD" gray-{} \;
Mutta jos joku tiedosto on alihakemistossa, ongelmana on se, että koko polku päätyy kohdetiedoston nimeen, josta tulee gray-alihakemisto/kuva.png. Tällöin tiedoston luonti epäonnistuu, koska hakemistoa gray-alihakemisto ei ole olemassa. Yksi ratkaisu on poistaa kohdetiedoston nimestä hakemistopolku ja pitää vain tiedoston nimi basename-komennon avulla:
find . -name "*.png" -exec sh -c 'convert {} -fuzz 10% -fill black -transparent "#BDBDBD" "gray-$(basename {})"' \;
-
Siinä mielessä helppo tapaus, että ovat samassa kansiossa.
Jos eivät olisi, niin varmaan siirtäisi - sattuneesta syystä :D
Miten tuo find *
eroaa alkuperäisestä? Man sivuilta ei auennut.
-
Siinä mielessä helppo tapaus, että ovat samassa kansiossa.
Jos eivät olisi, niin varmaan siirtäisi - sattuneesta syystä :D
Miten tuo find *
eroaa alkuperäisestä? Man sivuilta ei auennut.
Siten, että "." -tarkoittaa kyseistä hakemistoja ja "*" tarkoittaa hakemiston kaikkia tiedostoja.
Eron huomaa seuraavalla:
ls .
ls *
Myös cd:llä voi verrata...
cd .
cd *
-
Mutta miten tuosta pitäisi päätellä, että se oleellisesti muuttaa palautettavaa arvoa?
Tässä lopullinen mustasta harmaaksi muutos:
find * -name "*.png" -exec convert {} -resize 24x24 -fuzz 10% -fill "#BDBDBD" -opaque "#000000" gray-{} \;
En ole aivan tyytyväinen lopputulokseen, koska kuviin jää mustat reuna ikonien ympärille.
Ehkä Gimpistä löytyy jokin toiminto, jolla tehdä eräajoja...
-fuzz 90%
poisti kaikki mustat :)
-
Mutta miten tuosta pitäisi päätellä, että se oleellisesti muuttaa palautettavaa arvoa?
Kun siinä komennossa on piste, niin find etsii työhakemistosta (siis nykyisestä hakemistosta) ja laittaa myös sen hakemiston polun siihen nimeen, siksi ne ovat muotoa "./tiedosto". Kun siinä komennossa on pisteen sijaan tähti (asteriski), niin bash laajentaa sen niin, että find saa kaikkien työhakemistossa olevien tiedostojen ja alihakemistojen nimet argumenteikseen ja siksi se käyttää noita tiedostonimiä. Alihakemistoissa olevat saavat edelleen myös polun eli ne ovat muotoa "alihakemisto/tiedosto" (polku voi olla pidempikin, jos niissä on myös alihakemistoja). En kyllä muista mikä oli yläraja noiden argumenttien määrälle, mutta sekin voisi kai tulla vastaan tuossa laajennuksessa.
-
Mutta miten tuosta pitäisi päätellä, että se oleellisesti muuttaa palautettavaa arvoa?
Kun siinä komennossa on piste, niin find etsii työhakemistosta (siis nykyisestä hakemistosta) ja laittaa myös sen hakemiston polun siihen nimeen, siksi ne ovat muotoa "./tiedosto". Kun siinä komennossa on pisteen sijaan tähti (asteriski), niin bash laajentaa sen niin, että find saa kaikkien työhakemistossa olevien tiedostojen ja alihakemistojen nimet argumenteikseen ja siksi se käyttää noita tiedostonimiä. Alihakemistoissa olevat saavat edelleen myös polun eli ne ovat muotoa "alihakemisto/tiedosto" (polku voi olla pidempikin, jos niissä on myös alihakemistoja). En kyllä muista mikä oli yläraja noiden argumenttien määrälle, mutta sekin voisi kai tulla vastaan tuossa laajennuksessa.
Ok, täytyy painaa mieleen.