GNU/Linux >> Linux の 問題 >  >> Linux

ファイル全体を読み取らずに、大きなファイルの末尾から X バイトを削除する方法は?

関数 truncate を使用します

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

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

切り捨てはファイル名を取ります
ftruncate は開いているファイル記述子を取ります

これらは両方ともファイルの長さを length に設定します そのため、切り捨てられるか伸びます (後者の場合、ファイルの残りの部分は NULL/ZERO で埋められます)。

[編集]
truncate (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

[/編集]


truncate への参照はたくさんありましたが、 このスレッドの関数では、スクリプト環境からファイルを一定量削減することに関する OP の質問に実際に答えた人は誰もいませんでした。ケビンの答えは truncate を使用しました ターゲット ファイルのサイズを固定量に変更する必要がありますが、もちろん、このソリューションの正しさを確認するには、ユーザーが最初にターゲット ファイルのサイズから最後に余分なデータを差し引いたものを知る必要があります。

   -s, --size=SIZE
          set or adjust the file size by SIZE bytes

Truncate SIZE の前に - を付けて、ターゲット ファイルの末尾から直接データを削除することを実際にサポートしています。 キャラクター。

たとえば、ファイルのサイズを 314 バイトに変更するには、次のようにします:

truncate --size=-314 target_file.bin


「切り捨て」を使用するのが最善の方法です。例をいくつか投稿します:

<オール>
  • ファイル「PNav-h.db」があり、50176 バイトです。

    -rw-r--r--  1 user user 50176 Mar  8 23:43 PNav-h.db
     $truncate -s 1000 PNav-h.db
    

    ファイルサイズを 1000 バイトに設定します

     -rw-r--r--  1 user user  1000 Mar  9 00:02 PNav-h.db
    
  • あなたの場合、 $truncate --size=xxx xxfilename を使用してください 、 -<size number> を使用 ファイルサイズを縮小する

    $truncate --size=-300 PNav-h.db
    -rw-r--r--  1 user user   700 Mar  9 00:07 PNav-h.db
    

    最終的なファイル サイズ =1000-300=700

  • +<size number> を使用 ファイルサイズを大きくするには

    $truncate --size=+500 PNav-h.db
    -rw-r--r--  1 user user  1200 Mar  9 00:09 PNav-h.db
    

    最終的なファイル サイズ =700 + 500 =1200

  • - がない場合 または + 、ファイルサイズを設定することです。

    $truncate --size=60000 PNav-h.db
    -rw-r--r--  1 user user 60000 Mar  9 00:12 PNav-h.db 
    

    最終的なファイル サイズを 60000 に設定


  • Linux
    1. ファイルの最後に改行を追加するにはどうすればよいですか?

    2. フォルダから最も古いファイルを削除するためのBashスクリプト?

    3. N番目に若いファイルをリストする方法(Lsを解析せずに!)?

    1. Utf-8ファイルからBOMを削除する方法は?

    2. Unix で ls コマンドからファイル サイズ/詳細を表示する方法

    3. ファイル内から単一のバイト チャンクを抽出するにはどうすればよいですか?

    1. テキスト ファイルから改行を削除するにはどうすればよいですか?

    2. ファイル B に表示される行を別のファイル A から削除するには?

    3. bcache からキャッシュ デバイスを削除するにはどうすればよいですか?