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: Marcos.MM 29 Dubna 2009, 17:40:18
-
Zdravím,
potřeboval bych prosím Vás pomoct s následujícím problémem. Jde mi o to napsat skript, který mi rozdělí soubor (slovník) na části. Znám příkazy split, csplit apod. Ale pokud vím, těmi dokážu ten slovník rozdělit jen dle velikosti. Slovník má např. 10 mb, tak split jej rozdělí dle definované velikosti. Ale nedokáže jej rozdělit jen s tím parametrem, že jej chci třeba na tři části bez toho, abych musel zjišťovat velikost slovníku. Něco málo v bashi jsem dělal, ale až tak moc do toho nevidím. Díky za případné rady či nápady.
-
Ak ti ide iba o delenie podľa veľkosti, spočítal by som si ju:
velkost=`find /cesta/k/suboru/slovnik.xxx -printf %s`
echo $velkost
vydelil troma deleno=$((${velkost} / 3))
a potom by som to predal splitu, alebo čomu už budeš chcieť.
Samozrejme cestu k súboru (ak sa mení) a na koľko častí to rozdeliť môžeš načítavať z pozičných ppremenných ($1 alebo $@) nemusí to byť "natvrdo" v scripte.
edit :
až teraz som si všimol: "bez toho, abych musel zjišťovat velikost slovníku."
-
Mno pokud to takto půjde, tak není potřeba dodržet to, abych nemusel zjišťovat velikost. Díky, vyzkouším. ;)
Edit: Děkuji mnohokrát, a kdyby to někoho zajímalo, tady je výsledný skript. Neříkám, že je profi, ale funguje.
#!/bin/bash
echo "Zadejte plnou cestu k souboru:"
read cesta
echo "Zadejte počet rozdělení:"
read pocet
velikost=`find $cesta -printf %s`
deleno=$((${velikost} / $pocet))
echo "Soubor $cesta o velikosti $velikost bajtů bude rozdělen.."
echo "..na $pocet části o velikosti $deleno bajtů..."
split -d -b $deleno $cesta
echo "Hotovo."
-
Samozrejme cestu k súboru (ak sa mení) a na koľko častí to rozdeliť môžeš načítavať z pozičných ppremenných ($1 alebo $@) nemusí to byť "natvrdo" v scripte.
#!/bin/bash
velikost=`find $1 -printf %s`
deleno=$((${velikost} / $2))
echo "Soubor $1 o velikosti $velikost bajtů bude rozdělen.."
echo "..na $2 části o velikosti $deleno bajtů..."
split -d -b $deleno $1
echo "Hotovo."
exit 0
spusti scriptrozdel /cesta/k/suboru/slovnik.xxx 3
-
To numirah:
velikost=`find $1 -printf %s`
nemalo by tam byt skor nieco ako:
velikost=`find . -iname $1 -printf %s`
, aby find hladal velkost suboru s danym menom v aktualnom adresari.
-
>> petergula
mohlo by byť, ale keďže zadávaš celú cestu k jednému konkrétnemu súboru nieje to treba
-
#!/bin/bash
if test $# -ne 2; then
echo "gimme two parameteres, path to file(1) and decided parts(2)";
exit;
fi
if test ! -f "$1"; then
echo "bad file ..";
exit;
fi
velikost=`du -k "$1" | sed 's/\s\+.*//'`;
velikost_casti=$(($velikost / $2 + $velikost % $2));
echo "soubor bude rozdelen na $2 casti o velikosti $velikost_casti""Kb";
split --bytes=$velikost_casti\K "$1" $1.
-
poprípade ma napadá ešte tretia podmienka
if ! [[ "$2" =~ ^[0-9]+$ ]] ; then
echo "druhy parameter nieje cislo"
exit
fi
-
Vážně všem děkuji za rady. Nějak jsem si z toho splácal potřebný skript. ;)