如何從命令列縮短檔案?

如何從命令列縮短檔案?

我有一個150GB 的xml 文件,我想將其縮短(即截斷)到大約1GB - 是否有一個簡單的(bash 或類似)命令我可以使用,或者我必須走編程路線(在vi 或emacs 中編輯它)即使在大型鋼鐵系統上也是一場惡夢)?

(我並不特別擔心資訊遺失,我想要一個更短的文件,這樣我就可以測試一個軟體,而不必等待很多小時才能得到答案,更短的文件將允許我做到這一點。)

答案1

假設您要截斷並提取 150 GB 檔案的前 1 GB:

head

head -c 1G infile > outfile

請注意,G後綴可以替換為 來GB對齊到 1000 而不是 1024。

或與dd

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

或者如 Wumpus Q. Wumbley 的回答一樣,dd可以就地截斷。

答案2

若要將檔案截斷為 1 GB,請使用以下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 是所需的大小。我避免了 bs=1m 因為這是一個「可移植性」答案,而 classicdd只知道後綴k, b, 和w

答案4

您可以使用該split命令。

split -C 1G <filename>

有關更多詳細信息,請查看此堆疊溢位答案

相關內容