Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 多文件合併實戰:cat、輸入重定向與大數據場景優化

編輯:關於 Linux

將成百上千個 SQL 腳本、日誌文件、代碼片段合併為單一文件,是數據遷移、日誌分析、代碼審計的高頻需求。本文對比 cat、sed、awk、find+xargs 多種方案,並針對大文件、二進制文件、編碼不一致場景給出優化策略。

文件合併場景示意圖

核心命令對比

命令適用場景優點缺點
cat *.sql > all.sql同目錄文本文件、數量 < 1萬最簡單、Shell 擴展自動排序參數列表過長報錯、不遞歸
cat file1 file2 file3 > merged指定順序、少量文件精確控制順序手工繁瑣
find . -name '*.sql' -exec cat {} + > all.sql遞歸查找、大量文件無參數長度限制、遞歸順序不可控
find . -name '*.sql' | sort | xargs cat > all.sql需排序合併可控順序文件名含空格需 -print0
awk 'FNR==1 && NR!=1{next}1' *.sql > all.sql合併 CSV/帶表頭文件自動跳過重複表頭僅文本、記憶體佔用大

大數據場景優化策略

1. 參數列表過長解決

# 錯誤:/usr/bin/cat: Argument list too long
# 解決:find + exec 或 xargs
find /data/sql -name '*.sql' -exec cat {} + > /tmp/merged.sql

# 或分批處理
ls /data/sql/*.sql | xargs -n 1000 cat >> /tmp/merged.sql

2. 進度監控與斷點續傳

# pv 顯示進度
find . -name '*.log' | sort | xargs cat | pv -l > merged.log

# 斷點續傳思路:記錄已處理文件列表
touch processed.list
find . -name '*.log' | sort | while read f; do
    grep -qxF "$f" processed.list && continue
    cat "$f" >> merged.log
    echo "$f" >> processed.list
done

3. 編碼統一(避免合併後亂碼)

# 檢測編碼
file -bi *.sql | sort -u

# 統一轉 UTF-8 後合併
find . -name '*.sql' -exec sh -c 'iconv -f GBK -t UTF-8 "$1" >> merged.sql' _ {} \;

4. 二進制文件合併(視頻分片、鏡像分卷)

# 視頻分片合併(需相同編碼參數)
cat video_part_* > video.mp4

# 大文件分卷合併
cat large_file.tar.gz.* > large_file.tar.gz

# 校驗完整性
sha256sum large_file.tar.gz

SQL 遷移專用:去重與事務包裹

# 1. 合併並去重(假設每行獨立 INSERT)
cat *.sql | sort -u > merged_unique.sql

# 2. 包裹事務(加速導入)
echo "BEGIN;" > final.sql
cat merged_unique.sql >> final.sql
echo "COMMIT;" >> final.sql

# 3. 分庫分表導入優化
# 使用 mysql 客戶端 source 命令或管道
mysql -u root -p db_name < final.sql

常見坑點避雷

  • 文件名含空格/特殊字符: 必須用 find -print0 | xargs -0 cat
  • 符號鏈接循環: find -L 避免無限遞歸
  • 權限不足: cat: permission denied 需 sudo 或調整權限
  • 磁碟空間不足: 目標分區剩餘空間需 > 源文件總和 1.5 倍

總結

cat 是合併核心,find 提供遞歸與參數長度突破,sort 賦予順序可控,awk 解決表頭去重。**根據文件量級、類型、順序需求組合選型**,並建立「檢測編碼 → 統一編碼 → 分批合併 → 校驗完整性」標準化流程,才能應對 TB 級合併任務。

Copyright © Windows教程網 All Rights Reserved