要在 Linux 中合併文字檔而無須開啟終端機,可以執行一個在本機瀏覽器中運作的文字檔合併工具,它會依照你在檔案對話框中挑選的順序讀取兩個到二十個 TXT、CSV、MD 或 LOG 檔,並以一個換行、一個空白行,或完全不加分隔符的方式將它們連接起來,最後把合併結果以 UTF-8 文字檔下載為 merged-text.txt —— 整個過程完全在當前的瀏覽器分頁內完成,無須上傳也無須帳號。Linux 使用者通常第一時間會想到 cat file1.txt file2.txt > merged.txt,當你有 shell 並信任你的重新導向箭頭時,這個指令運作得很完美。當你沒有 shell 存取權、想在合併前預覽結果,或需要在單一換行、空白行、完全不加分隔符之間做出明確、受控的選擇時,瀏覽器路線就更有意義。只要設定相同,兩種方式產生的最終位元組完全相同;差別在於檔案落地前你是否看得到合併後的文字,以及順序能否在一次手誤的 shell 歷史紀錄中存活下來。

how to merge text files in linux
在 Linux 中合併文字檔,不必碰觸終端機

當 Linux 已經有 cat,為何還要動用瀏覽器工具

Linux 數十年來一直有這個問題的答案。cat file1.txt file2.txt file3.txt > merged.txt 能在單一 shell 指令列中將三個檔案合併成第四個,而 cat *.txt > merged.txt 則會依照你的萬用字元展開順序,把目錄中所有的文字檔全部壓平。這些指令快速、具決定性、可編寫指令稿,而且有完善的文件記錄。但它們也毫不留情:一個放錯位置的 > 會覆寫錯誤的檔案、順序取決於萬用字元展開規則而非你的意圖、重新導向落地前沒有預覽,而且在相鄰檔案之間,「一個換行」、「空白行」、「不加分隔符」之間並沒有內建的區別。

文字檔合併工具 這類瀏覽器型工具,犧牲了 shell 的速度與可編寫性,換來三項終端機難以輕易提供的功能:依照你點選順序保留順序的視覺化檔案選擇器、在任何內容寫入之前對合併字串的即時預覽,以及明確的三向分隔符選擇。當沒有 shell 存取權、合併是單次操作而非可編寫指令稿的批次處理,或是你需要在結果送往下游程式(例如 Markdown 渲染器、日誌分析器,或能識別 CSV 的試算表)之前逐字確認結果時,這個取捨是值得的。若要在 CI 流程中反覆合併,shell 仍然是贏家;若要在桌面上進行一次小心翼翼的人工合併,瀏覽器往往才是更合適的選擇。

工具會接受的檔案,以及它會拒絕的檔案

這個合併工具接受檔名以 .txt.csv.md.log 結尾的檔案,且單次可接受兩個到二十個。兩個是下限,因為單一檔案的操作不是合併;二十則是上限,以確保瀏覽器記憶體、平行文字解碼、預覽渲染與輸出大小都在可控範圍內。總輸入大小嚴格限制在 10 mebibyte;10 MiB 會被接受,超過一個位元組就會在任何檔案內容被解碼之前遭到拒絕,因此瀏覽在邊界上的批次永遠不會被默默截斷。

在有效批次中,空檔是被允許的。它們對合併後字串的貢獻是空字串,但你選擇的分隔符仍會插入在它們前後,如此一來,所宣告的檔案順序得以保留,而非默默捨棄某個項目。零位元組結果只會在所有輸入檔皆為空檔且選擇「不加分隔符」時才會出現。這個工具把所有被接受的檔案都視為純文字:副檔名並非格式的承諾。CSV 引號、Markdown 結構、日誌記錄邊界與分隔符都仍只是普通字元;一個被改為這些被接受副檔名的二進位檔,在解碼時可能會出現替換字元,而這正是預覽步驟存在的理由。

可接受的副檔名視為是否進行格式感知解析請特別注意
.txt純文字編碼不符會以替換字元呈現
.csv純文字無 —— 僅在結構相符時進行串接重複的標頭、不一致的分隔符,以及加上引號的多行記錄都不會被正規化
.md純文字無 —— 章節順序由選擇器保留標題與程式碼區塊會以普通字元串接
.log純文字無 —— 記錄順序由選擇器保留日誌內既有的換行會保持瀏覽器讀入時的原樣

使用瀏覽器工具在 Linux 中合併文字檔

  1. 在你處理 Linux 檔案工作常用的瀏覽器分頁中開啟文字檔合併工具。
  2. 點選檔案選擇器,挑選兩個到二十個檔名以 .txt.csv.md.log 結尾的檔案。依你希望它們出現在結果中的順序點選 —— 選擇器會保留你的點選順序,而工具本身不會重新排序。
  3. 確認對話框中顯示的總大小在 10 MiB 以下;若選擇器回報批次過大,請在繼續前移除或縮小檔案,因為上限是在任何內容被讀取之前強制執行的。
  4. 選擇分隔符:一個換行 會在相鄰檔案字串之間插入恰好一個 LF;一個空白行 會插入兩個 LF 字元;不加分隔符 則會直接串接字串。在任何情況下,每個檔案內既有的換行都會被保留。
  5. 點選「合併」,然後從上到下閱讀預覽,並檢查檔案之間的邊界。當結果看起來正確時,點選「下載」以儲存 merged-text.txt;此檔案會以 UTF-8 純文字 Blob 建立,暫時性的物件 URL 會立即撤銷 —— 請參閱 MDN URL.createObjectURL 參考資料 以了解此模式 —— 因此不會留下任何殘留的 URL。

合併工具保留什麼、改動什麼

這個合併工具會保留它讀取的所有內容。它不會修剪前後空白、不會去除重複的邊界行、不會正規化檔案中既有的換行、不會加上位元組順序標記,也不會以任何方式修改來源檔案。工具在相鄰檔案之間唯一新增的字串,就是你選擇的分隔符。一個換行會插入恰好一個 LF 字元;一個空白行會插入恰好兩個 LF 字元;不加分隔符則完全不插入。若一個檔案原本就以 LF 結尾,而你又選擇了空白行選項,那麼在下一個檔案之前就會出現三個連續的 LF 字元 —— 這是「檔案以換行結尾」加上「空白行分隔符」堆疊後的預期行為,並非可回報的錯誤。

對下游工具影響最大的,是下載步驟。Blob 會宣告為 UTF-8 純文字,它的位元組是由 JavaScript 字串所產生。不會加上位元組順序標記。每個已解碼檔案內既有的換行會保持瀏覽器讀入時的原樣,因此若你的來源檔案在磁碟上為 CRLF,而瀏覽器也以 CRLF 形式回傳,則合併後的檔案內容也會包含 CRLF;只有工具所插入的分隔符會被正規化為 LF。若你需要全檔嚴格的 CRLF,請先正規化,再進行合併。

這在 Linux 端可乾淨處理的一般工作

串接幾個小筆記、把匯出的清單片段附加到主清單之後、以你撰寫的順序合併 Markdown 章節、堆疊相容的日誌片段,以及合併標頭、分隔符與多行引號慣例都已對齊的 CSV 片段,這些都是這個合併工具在設計上足以勝任的工作。10 MiB 上限與二十個檔案上限是約束性的限制;在這些限制之內,預覽步驟正是讓結果值得信賴的關鍵。若是為了 Excel 而合併 CSV 片段,三步驟 Excel 合併指南 會使用相同的工具,並加入試算表相關的檢查。

這個工具不適合的情境:結構不一致的 CSV 檔案、被意外改檔名為 .txt 的二進位檔、封存檔、加密資料,以及任何單一檔案大小超過總量上限的情形。對於敏感性或極大量的資料 —— 數 GB 的日誌、受法規規範的紀錄、任何你無法承擔暴露給瀏覽器渲染器風險的內容 —— 一個具備明確編碼與串流行為的本機命令列工具仍是更安全的選擇。這個瀏覽器工具適用於有界限的便利性,而非用於封存保存或無損的二進位串接。

在儲存之前確認輸出結果

預覽是唯一能抓出點選順序錯誤、分隔符不符,或是你誤讀檔案內容的地方。請從上到下閱讀,特別留意檔案之間的邊界行;若分隔符本應為單一換行而你卻看到兩個,或反之,請在下載前修正選擇。下載的檔案只有在按下下載按鈕時才會產生,而選擇新檔案或新分隔符會清除先前的結果及其驗證狀態,因此不會把舊的輸出誤認為是當前的輸入。

大小上限的實例演練。二十個各 524,288 位元組(512 KiB)的檔案加總恰好為 10 MiB,其中 10 MiB = 10 × 1024 × 1024 = 10,485,760 位元組。這個工具會接受這個批次,因為總量恰好等於上限。將其中任何一個檔案替換為 524,289 位元組的版本,總量就會變成 19 × 524,288 + 524,289 = 9,961,472 + 524,289 = 10,485,761 位元組 —— 超過上限一個位元組 —— 整個批次就會在任何檔案被解碼之前遭到拒絕。這正是這個上限在設計時所要守住的那條界線,也是為什麼在邊界上的批次應該先在檔案管理員中確認過再送進選擇器。

在確認已開啟下載結果於其目標應用程式並驗證無誤之前,請保留來源檔案。這個工具絕不會修改原始檔案,但 cat ... > merged.txt 的重新導向箭頭習慣可能會意外覆寫輸入檔;因此即使合併工具並未介入,保留原始檔案也能為你保留一條復原路徑。一旦結果通過驗證,下載所使用的暫時性物件 URL 早已被撤銷 —— 因此重複渲染並不會在頁面上累積 Blob URL —— 而且整個操作沒有任何伺服器請求、瀏覽紀錄或背景上傳。