コマンドラインからファイルを短くするにはどうすればいいですか?

コマンドラインからファイルを短くするにはどうすればいいですか?

150 GB の xml ファイルがあり、これを約 1 GB に短縮 (つまり切り捨て) したいと考えています。使用できる簡単な (bash または類似の) コマンドはありますか。それとも、プログラムによる方法 (vi または emacs で編集するのは、大規模なシステムでも悪夢です) を使用する必要がありますか。

(情報の損失については特に心配していません。ファイルを短くすれば、ソフトウェアをテストして、回答を何時間も待たずに済むので、ファイルサイズを小さくできます。ファイルが短ければ、それが可能になります。)

答え1

150 GB のファイルの最初の 1 GB を切り捨てて抽出すると仮定します。

head

head -c 1G infile > outfile

サフィックスを に置き換えて、1024 ではなく 1000 に揃えることGができることに注意してください。GB

または、以下を使用しますdd:

dd if=infile of=outfile bs=1M count=1024

または、Wumpus Q. Wumbley の回答のように、ddその場で切り捨てることもできます。

答え2

ファイルを 1 ギガバイトに切り捨てるには、次のtruncateコマンドを使用します。

truncate -s 1G file.xml

切り捨ての結果は有効な XML ファイルではない可能性がありますが、その点はご理解いただけると思います。

GNU版のドキュメントtruncateここBSD版のドキュメントはここ

答え3

可能であれば、truncateJohn1024 の回答にあるコマンドを使用します。ただし、これは標準の UNIX コマンドではないため、いつか使用できなくなる可能性があります。その場合は、ddインプレース切り捨ても実行できます。

ddのデフォルトの動作は、コピーが終了した時点で出力ファイルを切り捨てることです。そのため、長さ 0 の入力ファイルを指定して、目的の切り捨てポイントから書き込みを開始するように指示するだけです。

dd if=/dev/null of=filename bs=1048576 seek=1024

dd(これは、 multithr3at3d の回答のコピーと切り捨てと同じではありません。)

1048576 と 1024 を使用したのは、1048576*1024 が目的のサイズであるためであることに注意してください。これは「移植性」の回答であり、classic はddサフィックスkbwのみを認識するため、 bs=1m は使用しませんでした。

答え4

コマンドを使用できますsplit

split -C 1G <filename>

詳細はこちらをご覧くださいスタックオーバーフローの回答

関連情報