首頁 > 系統教程 > Linux > 主體

Linux 檔案操作指南:分割與重組檔案的技巧

王林
發布: 2024-01-06 16:09:51
轉載
1189 人瀏覽過
導讀 Linux 有幾個用於分割檔案的工具程式。那你為什麼要分割文件呢?一個用例是將大檔案分割成更小的尺寸,以便它適用於比較小的儲存介質,例如 USB 隨身碟。當您遇到 FAT32(最大檔案大小為 4GB),且您的檔案大於此時,透過 USB 傳輸檔案也是一個很好的技巧。另一個用例是加速網路檔案傳輸,因為小檔案的並行傳輸通常更快。

我們將學習如何使用 csplit,split 和 cat 來重新整理文件,然後再將文件合併在一起。這些操作在任何文件類型下都有用:文字、圖片、音訊檔案、ISO 鏡像檔案等。

使用 csplit 分割檔案

csplit 是這些有趣的小指令中的一個,它永遠伴你左右,一旦開始使用它就離不開了。 csplit 將單一檔案分割成多個檔案。這個範例示範了最簡單的使用方法,它將文件 foo.txt 分成三個文件,以行號 17 和 33 作為分割點:

$ csplit foo.txt 17 33
2591
3889
2359
登入後複製

csplit 在目前目錄下建立了三個新文件,並以位元組為單位列印出新文件的大小。預設情況下,每個新檔案名稱為 xx_nn:

$ ls
xx00
xx01
xx02
登入後複製

您可以使用 head 指令查看每個新檔案的前十行:

$ head xx*
==> xx00 <== Foo File by Carla Schroder Foo text Foo subheading More foo text ==> xx01 <== Foo text Foo subheading More foo text ==> xx02 <==
Foo text
Foo subheading
More foo text
登入後複製

如果要將檔案分割成包含相同行數的多個檔案怎麼辦?可以指定行數,然後將重複次數放在在花括號中。此範例重複分割 4 次,並將剩餘的轉儲到最後一個檔案:

$ csplit foo.txt 5 {4}
57
1488
249
1866
3798
登入後複製

您可以使用星號通配符來告訴 csplit 盡可能重複分割。這聽起來很酷,但是如果檔案不能等分,則可能會失敗(LCTT 譯註:低版本的 csplit 不支援此參數):

$ csplit foo.txt 10 {*}
1545
2115
1848
1901
csplit: '10': line number out of range on repetition 4
1430
登入後複製

預設的行為是刪除發生錯誤時的輸出檔。你可以用 -k 選項來解決這個問題,當有錯誤時,它就不會刪除輸出檔。另一個行為是每次執行 csplit 時,它將覆蓋先前建立的文件,所以你需要使用新的文件名稱來分別保存它們。使用 --prefix= _prefix_ 來設定一個不同的檔案前綴:

$ csplit -k --prefix=mine foo.txt 5 {*}
57
1488
249
1866
993
csplit: '5': line number out of range on repetition 9
437
$ ls
mine00
mine01
mine02
mine03
mine04
mine05
登入後複製

選項 -n 可用來變更檔案編號的數字位數(預設為 2 位元):

$ csplit -n 3 --prefix=mine foo.txt 5 {4}
57
1488
249
1866
1381
3798
$ ls
mine000
mine001
mine002
mine003
mine004
mine005
登入後複製

csplit 中的 “c” 是上下文(context)的意思。這意味著你可以根據任意匹配的方式或巧妙的正規表示式來分割檔案。下面的例子將文件分成兩部分。第一個檔案在包含第一次出現 “fie” 的前一行處結束,第二個檔案則以包含 “fie” 的行開頭。

$ csplit foo.txt /fie/
登入後複製

在每次出現 “fie” 時分割檔案:

$ csplit foo.txt /fie/ {*}
登入後複製

在 “fie” 前五次出現的地方分割檔案:

$ csplit foo.txt /fie/ {5}
登入後複製

僅當內容以包含 “fie” 的行開始時才複製,並且省略前面的所有內容:

$ csplit myfile %fie%
登入後複製
將檔案分割成不同大小

split 與 csplit 類似。它將檔案分割成特定的大小,當您將大檔案分割成小型的多媒體檔案或使用網路傳送時,這就非常棒了。預設的大小為 1000 行:

$ split foo.mv
$ ls -hl
266K Aug 21 16:58 xaa
267K Aug 21 16:58 xab
315K Aug 21 16:58 xac
[...]
登入後複製

它們分割出來的大小相似,但你可以指定任何你想要的大小。這個例子中是 20M 位元組:

$ split -b 20M foo.mv
登入後複製

尺寸單位縮寫為 K,M,G,T,P,E,Z,Y(1024 的冪)或 KB,MB,GB 等等(1000 的冪)。

為檔案名稱選擇自己的前綴和後綴:

$ split -a 3 --numeric-suffixes=9 --additional-suffix=mine foo.mv SB
240K Aug 21 17:44 SB009mine
214K Aug 21 17:44 SB010mine
220K Aug 21 17:44 SB011mine
登入後複製

-a 選項控制編號的數字位置。 --numeric-suffixes 設定編號的開始值。預設前綴為 x,你也可以透過在檔案名稱後面輸入它來設定一個不同的前綴。

將分割後的檔案合併

你可能想在某個時候重組你的檔案。常用的 cat 指令就用在這裡:

$ cat SB0* > foo2.txt
登入後複製

範例中的星號通配符將匹配到所有以 SB0 開頭的文件,這可能不會得到您想要的結果。您可以使用問號通配符進行更精確的匹配,每個字元使用一個問號:

$ cat SB0?????? > foo2.txt
登入後複製

和往常一樣,請查閱相關的手冊和資訊頁面以取得完整的命令選項。

以上是Linux 檔案操作指南:分割與重組檔案的技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:linuxprobe.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!