I need to delete the first 2 bytes of a 6MB file. However, this is an embedded Linux with only 32 Mbytes RAM and less than 1 MB free flash memory.
I tried using dd, as:
1 – # dd bs=1 skip=2 count=1022 if=input of=ouput_1
2 – # dd bs=1024 skip=1 if=input of=ouput_2
3 – # rm -rf input
4 – # (dd if=ouput_1 ; dd if=ouput_2) > ouput
5 – # rm -rf ouput_1 ouput_2
With all files under the /tmp (mounted as tmpfs on RAM), my problem is that just before lines 3 and 5, the memory needed is 12 Mbyte (2x6MB), and the process sometimes fail and gives an "Not enough memory" error.
Is there a way I can remove the first 2 bytes without allocating twice the size of the file ? Can I use dd (or any other) to cut a binary file 'in place' ?
Best Answer
I think this should work:
Wrapping this all up in a script you could have something like this:
Call this as:
Where
2
is the number of bytes to delete from the beginning offile.data
As @Gilles points out, this solution is not robust in case of unplanned outage, which could occur part-way through
dd
's processing; in which case the file would be corrupted.