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
-
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:
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
-
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
-
ja to jednoduse nechapu
-
nechapu jaka je v tom veda .. copak `rm -rv soubor*` nestaci?
-
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
-
Jeste ze takovyhle hracky jdou i pres c :-)
-
ps. porovnani se dela pomoci diff .. viz `man diff`
-
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 ..
-
ps. porovnani se dela pomoci diff .. viz `man diff`
Jo press diff, ale jak potom ucesat ten seznam to je pro me neresitelne
-
`man sed`, `man grep`, `man perlre` ..
http://forum.ubuntu.cz/index.php/topic,16724.0.html
-
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, |, +
-
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.