Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Bash, vyhledání obrázků dle obsahu css souboru  (Přečteno 2306 krát)

mr.p

  • Návštěvník
  • Příspěvků: 89
Bash, vyhledání obrázků dle obsahu css souboru
« kdy: 04 Dubna 2013, 14:26:44 »
Pěkný den přeji,

řeším následující problém:
Mám skupinu css souborů (ty jsou v jedné složce) a v nich používám obrázky třeba jako pozadí nebo ikony atd... klasický stylování designu webu. Ty obrázky jsou pak uloženy ve složce <nazev>_template/images. Kde název je název konkrétního templatu použitého na stránce. Problém je v tom, že jsem vždy zkopíroval složku <nazev>_template a pak jen upravil css a přepsal obsah obrázků, názvy zůstaly stejné, ale nechci mít v těch složkách obrázky navíc.

A protože používám linux napadlo mě celý problém vyřešit pekným bashem, který by prošel složky s obrazkama v jednotlivych templatech a srovnal by je s obsahem v těch css souborech a vypsal by, které obrázky tak nejsou obsažené v tom css. V linuxu se ještě nepohybuju tak dlouho a bash nemám nastudovaný.

Prosím o radu kam se mám podívat případně o nástin řešení, moc vám děkuji za reakce :)

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Bash, vyhledání obrázků dle obsahu css souboru
« Odpověď #1 kdy: 04 Dubna 2013, 16:13:32 »
tohle za tebe asi nikdo nenapise .. zacni, a v pripade ze budes mit problemy tak se normalne zeptej ..,

ja za sebe bych zrovna tohle (skoro jako vsechno ;)) delal v perlu ..

zdravim, ntz
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

mr.p

  • Návštěvník
  • Příspěvků: 89
Re:Bash, vyhledání obrázků dle obsahu css souboru
« Odpověď #2 kdy: 04 Dubna 2013, 20:15:22 »
Mno tak se do toho dáme, ale budu potřebovat vést trochu za ruku :)

Začneme z jednoducha: Jak mám procházet soubory ve složce pomocí cyklu?

btw. ten script si představuju nějak takhle:
  • budu procházet složku templates a hledat složky odpovídající patternu <nazev>_template
  • ten <nazev> uložím do proměnné
  • budu procházet <nazev>_template/images a každej název obrázku grepnu, zda se vyskytuje v některém z css souborů odpovídající patternu .*<nazev>.*.css
  • pokud se v tom css nevyskytuje grep by mi měl dát prázdný výsledek, takže si obrázek i s cestou k němu nechám vypsat na obrazovku

Docela jednoduše to vypadá, že :) Teď ještě vědět jak to napsat...

mr.p

  • Návštěvník
  • Příspěvků: 89
Re:Bash, vyhledání obrázků dle obsahu css souboru
« Odpověď #3 kdy: 04 Dubna 2013, 21:00:48 »
Tak jsem napsal první část :D Předpokládám, že to budu spouštět ve složce templates.

Kód: [Vybrat]
for file in `find . -type d -name "*_template"`
do     
        file="${file%_template}"
        echo "Nasel jsem ${file:2}";
done

Malá otázka: find mi vrací na začátku ./ je možný to nějak odstranit společně s tim _template v jednom kroku?

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Bash, vyhledání obrázků dle obsahu css souboru
« Odpověď #4 kdy: 04 Dubna 2013, 22:25:48 »
pekny ;) .. treba pomoci `basename' .. neni to sice idealni, ale tvor a az to bude hotovy, tak se s tim pochlub a urcite se to jeste vylepsi
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

pacholik

  • Závislák
  • ***
  • Příspěvků: 2072
Re:Bash, vyhledání obrázků dle obsahu css souboru
« Odpověď #5 kdy: 04 Dubna 2013, 23:29:57 »
nebo říct findu aby vracel jenom jméno souboru
Kód: [Vybrat]
find . -type d -name "*_template" -printf "%f\n"
potom se mi to zdá docela jednoduchý
Kód: [Vybrat]
cd "$složka"
for i in *; do grep "$i" "$css" > /dev/null || echo $i; done

mr.p

  • Návštěvník
  • Příspěvků: 89
Re:Bash, vyhledání obrázků dle obsahu css souboru
« Odpověď #6 kdy: 04 Dubna 2013, 23:34:06 »
Takže dal jsem to dohromady :) Nakonec jsem ani nepotřeboval `basename`
Kód: [Vybrat]
#!/bin/bash

for dir in `find . -type d -name "*_template"`
do
  name=`expr "${dir}" : '..\([a-z]*\)'`

  for img in `find ${dir}/images -type f -regextype posix-extended -regex '^.*\.(png|jpg)'`
  do
    img=${img##*/}
    grp=`grep -l "$img" ${dir}/css/*${name}*.css`

    if [ -z "${grp}" ]; then
      echo ${dir}"/images/"${img}
    fi
  done
 
  echo # Pro zprehledneni
done

A kdyz to spustim na serveru tak dostanu nasledujici hlasku pokazdy kdyz se dostanu k tomu ifu, ale jen u nekterych radku
Kód: [Vybrat]
./script.sh: line 11: [: too many arguments
Edit, tak chyba byla v tom, že na serveru je jinak nastaveno chovani grepu. Takže jsem to opravil i v kodu
« Poslední změna: 05 Dubna 2013, 00:45:20 od mr.p »

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Bash, vyhledání obrázků dle obsahu css souboru
« Odpověď #7 kdy: 05 Dubna 2013, 02:25:10 »
no, vzhledem k tomu, ze jsi ze zacatku prohlasoval ze (v shellu) programovat ****neumis, tak musim rict, ze jsi sikula ..
« Poslední změna: 05 Dubna 2013, 13:13:46 od ntz_reloaded »
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

mr.p

  • Návštěvník
  • Příspěvků: 89
Re:Bash, vyhledání obrázků dle obsahu css souboru
« Odpověď #8 kdy: 05 Dubna 2013, 08:23:18 »
ntz_reloaded:
Ooo, děkuji :) Jen si nějako neuvědomuju, kde jsem prohlašoval, že budu programovat? :P

pacholik:
díky za ten find, rozšířil jsi mi ještě trocho obzor :) Je fakt, že takhle by to bylo napsany "čistějc", řekl bych, podobně jako s využitím basename.

Vysvětlil bys mi prosím ještě toto? Ty dvě svyslítka tušim jsou schopný nahradit ten if, ale dev/null jsem nepobral
Kód: [Vybrat]
> /dev/null || echo $i

pacholik

  • Závislák
  • ***
  • Příspěvků: 2072
Re:Bash, vyhledání obrázků dle obsahu css souboru
« Odpověď #9 kdy: 05 Dubna 2013, 12:59:41 »
Jj, svislítka nahradí if
Kód: [Vybrat]
[ 1 == 2 ] && echo "1 = 2" || echo "1 ≠ 2"Když grep nic nenajde tak skončí neúspěchem (a vykoná se tedy to za ||).

Kdyby tam nebylo to přesměrování tak se vypíše výstup z grepu (což nechceš). /dev/null je taková černá díra.
http://www.abclinuxu.cz/ucebnice/zaklady/prikazova-radka/standardni-vstup-a-vystup

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Bash, vyhledání obrázků dle obsahu css souboru
« Odpověď #10 kdy: 05 Dubna 2013, 13:14:37 »
vypadavaji mi slova .. sorry
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

 

Provoz zaštiťuje spolek OpenAlt.