ファイル全体を読み込まずに、大きなファイルの末尾から X バイトを削除するにはどうすればよいでしょうか? 質問する

ファイル全体を読み込まずに、大きなファイルの末尾から X バイトを削除するにはどうすればよいでしょうか? 質問する

Linux には、末尾に余分な情報が追加されたかなり大きなファイルがあります。たとえば、1.6 GB のファイルの末尾に 314 バイトの余分なデータがあることがわかっているとします。

もちろん、ファイルの末尾にデータを追加するのは非常に簡単で効率的ですが、そのファイルの最初の部分を別のファイルにコピーせずに(またはそのファイルを上書きせずに)データを削除するにはどうすればよいでしょうか。

編集

これを C 言語で実行するための良いアドバイスをいくつか見ました。コマンドラインからスクリプト化したいと思っていましたが、それができない場合は、C 言語よりも Python 言語で実行したいと思っています。

Python にはファイル オブジェクトに truncate メソッドがあるようですが、どのように使用してもファイルが破壊されるようです。この問題を解決できるはずですが、もちろん回答は大歓迎です。

ベストアンサー1

機能を使用するtruncate

http://linux.die.net/man/2/truncate

int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length); 

truncateはファイル名を受け取り、
ftruncateは開いているファイル記述子を受け取ります

どちらもファイルの長さを設定するので、length切り捨てるか延長します(後者の場合、ファイルの残りの部分はNULL/ゼロで埋められます)。

[編集]
切り捨てる(Linuxシェルコマンド)も動作します

**SYNTAX**

truncate -s integer <filename>  
**OPTIONS**

-s number specify the new file length. If the new length is smaller than the current filelength data is lost. If the new length is greater the file is padded with 0. You can specify a magnitude character to ease large numbers:
b or B size is bytes.
k size is 1000 bytes.
K size is 1024 bytes.
m size is 10^6 bytes.
M size is 1024^2 bytes.
g size is 10^9 bytes.
G size is 1024^3 bytes.


**EXAMPLES**

To shrink a file to 10 bytes:

truncate -s 10 /tmp/foo

To enlarge or shrink a file to 345 Megabytes:

truncate -s 345M /tmp/foo

[/編集]

おすすめ記事