Symbiatch - maailma on rikki

Tehokkaampi tapa poistaa tiedostosta pala / More Efficient Way to Skip Bytes From a File

10.01.2008 02.07 - IT-ala 

Monet varmaankin tietävätkin komennon dd ja miten sillä on kiva kopioida tiedostoja ja leikellä palasia jne. No, tulipa tarve poistaa useiden gigojen tiedoston alusta 6 tavua. Tämähän menisi tietysti esimerkiksi sanomalla dd if=orig.file of=result.file ibs=6 skip=1 mutta jos tätä kokeilee, se on erittäin tehoton. Omalla koneellani tämä vei kaiken prosessoritehon ja sai siirrettyä 5 megatavua sekunnissa. Ei ollenkaan kiva.

Aloinpa sitten viritellä ja muistin että saahan komentojen tulostuksen putkitettua useammallekin prosessille kuin yhdelle. Joten kokeilinpa sitten tätä: dd if=orig.file bs=16M | (dd bs=6 count=1 of=/dev/null; dd of=result.file bs=16M). Ja hupsista, nopeus oli sen jälkeen 100 megatavua sekunnissa.

Eli kannattaa muistaa ehkä tämä pieni vinkki jos tarvitsee kopioida tiedostoja jättämällä alusta pieni määrä tavuja pois.

Many of you probably know the nice command dd and how to use it to copy files and parts of etc. Well, I needed to strip 6 bytes from the beginning of a multi-gigabyte file. This could be done with dd if=orig.file of=result.file ibs=6 skip=1 but if you try it, it's very inefficient. On my machine I could transfer 5MB/s. Not nice at all.

Then I started to tune it and remembered that you can pipe the output of a command to more than one process. So then I tried dd if=orig.file bs=16M | (dd bs=6 count=1 of=/dev/null; dd of=result.file bs=16M). And voilá, speed was 100MB/s.

So it may be wise to remember this little thing if you need to copy files and strip a small portion from the beginning..

Kommentoi

Kommentit

Jutut.fi  |  Omat jutut  |  Muiden jutut  |  Kategoriat  |  kirjaudu