150GBのxmlファイルを約1GBに短縮(つまり切り捨て)したいのですが、使用できる簡単な(bashまたは同様の)コマンドがありますか、それともプログラムによるルート(viまたはemacsで編集)を実行する必要がありますか?大きな鉄システムでも悪夢です)?
(私は特に情報の損失について心配していません。私はこれでソフトウェアの一部をテストでき、答えを何時間も待たずにできるように短いファイルが必要です。短いファイルでそれが可能になります。)
150GBファイルの最初の1GBを切り捨てて抽出するとします。
head
の場合:
head -c 1G infile > outfile
G
サフィックスをGB
に置き換えて、1024ではなく1000に揃えることができることに注意してください。
またはdd
を使用:
dd if=infile of=outfile bs=1M count=1024
または、Wumpus Q. Wumbleyの回答のように、dd
はその場で切り捨てることができます。
可能であれば、John1024の回答のようにtruncate
コマンドを使用します。ただし、これは標準のUNIXコマンドではないため、いつか使用できなくなる可能性があります。その場合、dd
はインプレース切り捨ても実行できます。
dd
のデフォルトの動作では、コピーが終了した時点で出力ファイルが切り捨てられるため、長さ0の入力ファイルを指定して、目的の切り捨てポイントから書き込みを開始するように指示します。
dd if=/dev/null of=filename bs=1048576 seek=1024
(これは、multithr3at3dの回答のコピーアンドトランケートdd
と同じではありません。)
1048576 * 1024が望ましいサイズであるため、1048576と1024を使用したことに注意してください。これは「移植性」の答えであり、古典的なdd
は接尾辞k
、b
、およびw
しか知らないため、bs = 1mを避けました。
私はあなたが何を求めているのか完全にはわかりません。他の149GBを削除したいだけですか、それとも150GBを1GBに圧縮しようとしていますか?とにかく、これはこれを達成するための便利な方法かもしれません。
split
コマンドは、任意のファイルを複数の部分に分割できます。 man split を参照してください。 -b
オプションを使用して、分割するファイルチャンクのサイズを指定できます。例えば:
$ split -b 1GB myfile.xml
他のオプションがない場合、これにより、文字x
で始まる複数のファイルが現在のディレクトリに作成されます。分割ファイルの名前を調整したい場合は、manページを参照してください。
ファイルを再アセンブルするには、cat * > re-assembled.xml
を使用するだけです。
例:
[kent_x86.py@c7 split-test]$ ls -l opendocman*
-rw-rw-r--. 1 kent_x86.py kent_x86.py 2082602 Mar 31 2017 opendocman-1.3.5.tar.gz
[kent_x86.py@c7 split-test]$ split -b 100K opendocman-1.3.5.tar.gz
[kent_x86.py@c7 split-test]$ ls
opendocman-1.3.5.tar.gz xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao xap xaq xar xas xat xau
[kent_x86.py@c7 split-test]$ ll
total 4072
-rw-rw-r--. 1 kent_x86.py kent_x86.py 2082602 Jan 5 11:06 opendocman-1.3.5.tar.gz
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xaa
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xab
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xac
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xad
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xae
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xaf
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xag
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xah
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xai
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xaj
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xak
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xal
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xam
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xan
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xao
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xap
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xaq
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xar
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xas
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xat
-rw-rw-r--. 1 kent_x86.py kent_x86.py 34602 Jan 5 11:06 xau
[kent_x86.py@c7 split-test]$ cat xa* > opendoc-reassembled.tar.gz
[kent_x86.py@c7 split-test]$ ls -l opendoc-reassembled*
-rw-rw-r--. 1 kent_x86.py kent_x86.py 2082602 Jan 5 11:07 opendoc-reassembled.tar.gz
結局、私はsed
を使用して、任意の数の行を抽出しました。
sed -n 1,1000000p infile.xml>outfile.xml