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..
|