Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Uran 10 Února 2009, 09:12:05

Název: seznamy srovnani [vyřešeno]
Přispěvatel: Uran 10 Února 2009, 09:12:05
Po dlouhe dobe jsem zacal delat poradek ve stazenych dokumentech. Zjistil jsem ze mam stazenych cca 600 html stranek s ruznymi navody a tipy.

Po pro mazani jsem se dostal na cislo cca 400 a tady zacina muj problem. Stranky jsou ulozeny ve formatu (soubor, soubor.htm, soubor.html) + adresar (soubor_sobory, soubor_files).

Pri promazavani jsem vsak smazal jen html soubory a slozky zustaly na miste.

Premyslel jsem jak se techto prebytecnych slozek zbavit a nakonec jsem vyplodil tyto skripty:

Kód: [Vybrat]
rm -rf soubory
rm -rf adresare

for b in *; do echo $b | grep -v _soubory | grep -v _files >> soubory; done

for i in *_soubory; do echo "${i%_soubory}" >> adresare; done

for a in *_files; do echo "${a%_files}" >> adresare; done

Tim jsem ziskal dva seznamy "soubory" obsahujici html,htm a "adresare" obsahujici vsechny slozky. Nasledujici idea, pres kterou se nemohu dostat, bylo porovnat tyto seznamy a jejich rozdil tj. slozky ktere jsou navic predhodit rm-rf ke smazani.

Kamen urazu je prave to porovnani, ktere nemohu vyresit.

Cele je to komplikovane tim ze slozky maji koncovku  _soubory i _files a soubory html, htm nebo zadnou

Dekuji za rady
Název: Re: seznamy srovnani
Přispěvatel: Jirka Simonek 11 Února 2009, 09:44:46
Jestli to dobre chapu, tak bych to udelal jako dva cykly v sobe.
for (pres nazvy v souboru adresare)
{
  vezmi nazev adresare
  for(pres nazvy v souboru soubory)
  {
     vezmi nazev souboru
     porovnej adresar a soubor
     stejne >> na_smazani (vystup do souboru)
   }
}
rm -rf < na_smazani
Název: Re: seznamy srovnani
Přispěvatel: nettezzaumana 11 Února 2009, 10:22:59
ja to jednoduse nechapu
Název: Re: seznamy srovnani
Přispěvatel: nettezzaumana 11 Února 2009, 10:29:41
nechapu jaka je v tom veda .. copak `rm -rv soubor*` nestaci?
Název: Re: seznamy srovnani
Přispěvatel: Jirka Simonek 11 Února 2009, 10:40:48
Teda napsal jsem to blbe, taklhe by to bylo (snad):
for (pres nazvy v souboru adresare)
{
  vezmi nazev adresare
  for(pres nazvy v souboru soubory)
  {
     vezmi nazev souboru
     porovnej adresar a soubor
     kdyz jsou stejne break
   }
   kdyz nebyl zadny stejny  (adresar  >> na_smazani)
}
rm -rf < na_smazani
Název: Re: seznamy srovnani
Přispěvatel: Martin - ViPEr*CZ* 11 Února 2009, 11:02:01
Jeste ze takovyhle hracky jdou i pres c :-)
Název: Re: seznamy srovnani
Přispěvatel: nettezzaumana 11 Února 2009, 11:05:41
ps. porovnani se dela pomoci diff  .. viz `man diff`
Název: Re: seznamy srovnani
Přispěvatel: nettezzaumana 11 Února 2009, 11:10:53
Jeste ze takovyhle hracky jdou i pres c :-)
.. hmm.

ad.1) jen masochista by to delal v c
ad.2) jj. vsichni vime ze delas v c. tlacis to kam je to jen mozne .. nicmene s timto pristupem ti doporucuju zalozit blog a podelit se o vysledky sve prace a badani ..

ad.3) premejslim, jestli bych taky nemel vyjmenovat nekam jazyky ve kterejch delam :D ..
Název: Re: seznamy srovnani
Přispěvatel: Uran 11 Února 2009, 12:28:52
ps. porovnani se dela pomoci diff  .. viz `man diff`

Jo press diff, ale jak potom ucesat ten seznam to je pro me neresitelne
Název: Re: seznamy srovnani
Přispěvatel: nettezzaumana 11 Února 2009, 12:37:50
`man sed`, `man grep`, `man perlre` ..

http://forum.ubuntu.cz/index.php/topic,16724.0.html
Název: Re: seznamy srovnani
Přispěvatel: Uran 11 Února 2009, 13:03:09
Tak jsem to za pomoci castecne vyresily:

Tak to funguje jen napul.

find . -type f | while read soubor; do
adresar=${soubor%.htm*};
if [[ -d "${adresar}_soubory" ]] || [[ -d "${adresar}_files" ]]; then
mv -f "$soubor" "${adresar}_files" "${adresar}_soubory" /home/ged/prechodne/vysledek;
fi
done



1. prepinac r pro mv jsem v man ani v helpu nenasel tak jsem ho odstranil
2. prenese se jen cast souboru a adresaru. Je to torchu divne ale je to presne jedna polovina tj 55 souboru

Vypisy:

puvodni obsah adresare:

http://uranit.wz.cz/file/pred.txt

co zustalo v adresari po skriptu:

http://uranit.wz.cz/file/potom_puvodni.txt

co se presunulo do adresare /home/ged/prechodne/vysledek:

http://uranit.wz.cz/file/potom_presunuto.txt

Jeste jsem zapomel zminit, ze nektere nazvy jsou tvoreny znaky: mezera, |, +
Název: Re: seznamy srovnani
Přispěvatel: Uran 11 Února 2009, 13:54:36
Tak jsem zkusil script pustit uz na jednou zfiltrovany adresar a svete div se zase se presunuly nejake soubory.

Projistotu jsem to zkusil jeste dvakrat a uz je vse ok.

Dekuji za trpelivost a rady.