使用 split 命令分割 Linux 檔案

2019-12-16 11:11:00

一些簡單的 Linux 命令能讓你根據需要分割以及重新組合檔案,來適應儲存或電子郵件附件大小的限制。

Linux 系統提供了一個非常易於使用的命令來分割檔案。在將檔案上傳到限制大小的儲存網站或者作為郵件附件之前,你可能需要執行此操作。要將檔案分割為多個檔案塊,只需使用 split 命令。

$ split bigfile

預設情況下,split 命令使用非常簡單的命名方案。檔案塊將被命名為 xaaxabxac 等,並且,大概地,如果你將足夠大的檔案分割,你甚至可能會得到名為 xzaxzz 的塊。

除非你要求,否則該命令將無任何反饋地執行。但是,如果你想在建立檔案塊時看到反饋,可以使用 --verbose 選項。

$ split –-verbose bigfilecreating file 'xaa'creating file 'xab'creating file 'xac'

你還可以給檔案命名字首。例如,要將你原始檔案分割並命名為 bigfile.aabigfile.ab 等,你可以將字首新增到 split 命令的末尾,如下所示:

$ split –-verbose bigfile bigfile.creating file 'bigfile.aa'creating file 'bigfile.ab'creating file 'bigfile.ac'

請注意,上述命令中顯示的字首的末尾會新增一個點。否則,檔案將是 bigfileaa 之類的名稱,而不是 bigfile.aa

請注意,split 命令不會刪除你的原始檔案,只是建立了檔案塊。如果要指定檔案塊的大小,可以使用 -b 選項將其新增到命令中。例如:

$ split -b100M bigfile

檔案大小可以是 KB、MB,GB,最大可以是 YB!只需使 K、M、G、T、P、E、Z 和 Y 這些合適的字母。

如果要基於每個塊中的行數而不是位元組數來拆分檔案,那麼可以使用 -l(行)選項。在此範例中,每個檔案將有 1000 行,當然,最後一個檔案可能有較少的行。

$ split --verbose -l1000 logfile log.creating file 'log.aa'creating file 'log.ab'creating file 'log.ac'creating file 'log.ad'creating file 'log.ae'creating file 'log.af'creating file 'log.ag'creating file 'log.ah'creating file 'log.ai'creating file 'log.aj'

如果你需要在遠端站點上重新組合檔案,那麼可以使用如下所示的 cat 命令輕鬆地完成此操作:

$ cat x?? > original.file$ cat log.?? > original.file

上面所示的分割和組合命令適合於二進位制和文字檔案。在此範例中,我們將 zip 二進位制檔案分割為 50KB 的塊,之後使用 cat 重新組合了它們,然後比較了組合後的檔案和原始檔案。diff 命令驗證檔案是否相同。

$ split --verbose -b50K zip zip.creating file 'zip.aa'creating file 'zip.ab'creating file 'zip.ac'creating file 'zip.ad'creating file 'zip.ae'$ cat zip.a? > zip.new$ diff zip zip.new$                    <== 無輸出 = 無差別

我唯一要提醒的一點的是,如果你經常使用 split 並使用預設命名,那麼某些檔案塊可能會覆蓋其他的檔案塊,甚至會比你預期的更多,因為有些是更早之前分割的。