1. 程式人生 > >Linux下二進位制檔案的分割與合併

Linux下二進位制檔案的分割與合併

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

dd的作用是轉換和拷貝檔案,我們可以利用它來分割檔案,相關的選項如下:
if=filename:輸入的檔名
of=finename:輸出的檔名
bs=bytes:一次讀寫的位元組數,預設是512bytes
skip=blocks:拷貝前,跳過的輸入檔案的前blocks塊,塊的大小有bs決定
count=blocks:只拷貝輸入檔案的前blocks塊
例如,現在有一個檔案

file,大小為116616位元組:
[root]# du -b file 
116616 file 
將其分割為兩檔案file1和file2,那我們就設定每塊為1024位元組,將file的前60塊放入file1,餘下的放入file2:
[root]# dd if=file bs=1024 count=60 skip=0 of=file1 
[root]# dd if=file bs=1024 count=60 skip=60 of=file2 
然後用cat將兩個檔案合併為file.bak,要注意檔案的順序:
[root]# cat file1 file2 > file.bak 
可以用md5sum驗證一下file和file.bak:
[root]# md5sum file 
3ff53f7c30421ace632eefff36148a70 file 
[root]# md5sum file.bak 
3ff53f7c30421ace632eefff36148a70 file.bak 
可以證明兩個檔案時完全相同的。
為了方便分割、合併檔案,我寫了兩個指令碼:
ddf.sh
#ddf.sh:分割檔案,分割後的檔案以數字結尾,例如file分割為兩個檔案:file1和file2 
#!/bin/sh 
#使用指令碼是第一引數是要分割的檔名 
Filename=$1 
Filesize
=0 
Path=`pwd` 
#驗證檔名是否正確,然後計算檔案的大小

if [ -z $Filename ];then 
echo "Error:The file name can not be empty" 
exit 
fi 
if [ -e $Filename ];then 
Filesize=`du -b $Filename | awk '{print $1}'` 
if [ $Filesize == 0 ];then 
echo "Error:The File size is zero!" 
exit 
fi 
echo "The file size is $Filesize Byte" 
echo "Plese enter the subfile size(KB):" 
else 
echo "Error:$Filename does not 
exist
!" 
exit 
fi 
#輸入分割後每個檔案的大小,單位是KB 
read Subfilesize
if [ -z $Subfilesize ];then
echo "Error:Input can not be empty"
exit
fi 
echo $Subfilesize | grep '^[0-9]\+$' >> /dev/null
if [ $? -ne 0 ];then
echo "Error:The Input is not a number!"
exit
elif [ $Subfilesize -eq 0 ];then
echo "Error:The Subfile size is zero!"
exit
fi 
#計算需要分割為幾個檔案 
SubfileByte=`expr $Subfilesize \* 1024`
Subfilenum=`expr $Filesize / $SubfileByte`
if [ `expr $Filesize % $Subfilesize` -ne 0 ];then
Subfilenum=`expr $Subfilenum + 1`
fi

#將檔案分割 
echo "$Filename will be divided into $Subfilenum" 
i=1
skipnum=0
while [ $i -le $Subfilenum ]
do
echo "$Filename$i"
dd if=$Filename of="$Path/$Filename$i" bs=1024 count=$Subfilesize skip=$skipnum
i=`expr $i + 1`
skipnum=`expr $skipnum + $Subfilesize`
done
echo "$Filename has been divided into $Subfilenum"
echo "Done !" 
caf.sh
#caf.sh:合併檔案,需要合併的檔案要放在一個資料夾裡 
# 檔名分為兩個部分,第一部分都相同,第二部分必須是從1開始的連續數字,例如file1,file2,file3 
# 合併後的檔名為file.bak 
#!/bin/sh 
#輸入檔名的第一部分 
echo "Please enter file name:" 
read Filename

if [ -z $Filename ];then 
echo "Error:The file name can not be empty" 
exit 
fi 
#輸入待合併檔案的個數 
echo "Please enter the number of subfiles:" 
read Subfilenum
if [ -z $Subfilenum ];then
echo "Error:The number of subfiles can not be empty"
exit
fi
echo $Subfilenum | grep '^[0-9]\+$' > /dev/null
if [ $? -ne 0 ];then
echo "Error:Input must be a number"
exit
fi
if [ $Subfilenum -eq 0 ];then
echo "Error:The number of subfiles can not be zero"
exit
fi 
#合併檔案 
i=1
Newfile=$Filename\.bak
while [ $i -le $Subfilenum ]
do
Subfilename=$Filename$i
if [ -e $Subfilename ];then
echo "$Subfilename done!"
cat $Subfilename >> $Newfile
i=`expr $i + 1`
else
echo "Error:$Subfilename does not exist"
rm -rf $Newfile
exit
fi
done
echo "Subfiles be merged into $Newfile"
echo "Success!" 
用這兩個指令碼完成對file的分割、合併:
[root]# ./ddf.sh file 
The file size is 116616 Byte 
Plese enter the subfile size(KB): 
60 
file will be divided into 2 
file1 
記錄了60+0 的讀入 
記錄了60+0 的寫出 
61440位元組(61 kB)已複製,0.0352612 秒,1.7 MB/秒 
file2 
記錄了53+1 的讀入 
記錄了53+1 的寫出 
55176位元組(55 kB)已複製,0.0316272 秒,1.7 MB/秒 
file has been divided into 2 
Done ! 
[root]# ls 
caf.sh ddf.sh file file1 file2
[root]# ./caf.sh 
Please enter file name:
file
Please enter the number of subfiles:

file1 done!
file2 done!
Subfiles be merged into file.bak
Success!
[root]# ls 
caf.sh ddf.sh file file1 file2 file.bak

 

相關推薦

Linux二進位制檔案分割合併

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

Linux相關】linux檔案分割合併

前言 近日由於網上下載了很多圖片,然後花了很長一段時間進行壓縮,壓縮完成後一看,128G多,由於機器在遠端,本來想通過百度網盤進行備份,後來提示最大單個檔案只能4G大小,無奈只能手動切割大檔案。 查了相關命令,發現可以通過組合split命令和cat命令來實現

Linux檔案分割和小檔案合併

就像Android中除錯問題,有的時候Log連續儲存會很大,這個時候進行分割就很好地處理檔案了。 在Linux下分割檔案通過split工具進行,合併檔案可以通過cat進行。 1. split a. 可以按行數進行分割 split -l 500 big

MySQL Linux二進位制檔案包安裝mysql

Linux下二進位制檔案包安裝mysql 解壓縮mysql二進位制原始碼包到制定指定目錄,可自定義目錄 tar zxvf /opt/mysql-5.6.10-linux-glibc2.5-x86_64.tar.gz -C /opt 建立自定義mysql存放目錄 m

linuxcore檔案設定檢視

程式異常退出時,核心會生成一個core檔案(是記憶體映像以及除錯資訊)。可以通過使用gdb來檢視core檔案,指示出導致程式出錯的程式碼所在的檔案和行數。  1、檢視系統中core檔案生成的開關是否開啟     1)使用ulimit -c命令可檢視core檔案的生成開

PDF檔案如何分割合併

在日常工作中,我們越來越多地接觸到PDF檔案。有時候我們會有將一個PDF檔案拆分成多個檔案或將多個PDF檔案合併成一個檔案的需求。對於一些經驗豐富的職場老手來說,解決這個問題輕而易舉,而對於一些職場新人來說卻是一個難題。今天,小編就給大家詳細講解PDF檔案如何拆分與合併。    1、因為PD

每天一點linux命令:分割合併文字

在linux的實際應用中,我們有時候需要對檔案進行分割與合併處理,我們可以使用split和paste命令進行此類操作。 split命令 split 是以一個很好的分割工具,它可以將一個檔案按行分割出來。(split只能按行分割,如果按列,可以用cut,當然更強大的還是用gawk)。 sp

Linux檔案打包、壓縮並分割成指定大小

轉自https://blog.csdn.net/loongembedded/article/details/54233175 Linux解壓檔案時遇到的問題,不知道總的資料是分了好多份,需要輸入命令統一解壓 1、普通tar壓縮命令 tar -zcvf

linux檔案的歸檔壓縮

檔案的歸檔 tar命令(下列中包含執行結果) # tar cf dir.tar /root/Desktop tar: Removing leading'/' f rom member names tar: / root /Desktop/dir.

檔案分割合併

import java.io.*; import java.util.*; public class MySplitFile { private String srcPath;//被分割的檔案目錄 private String destPath;//分割的目的

linuxlibevent安裝配置簡介 以及 linux檔案搜尋路徑的配置

libevent簡介 libevent是基於Reactor模式的I/O框架庫,它具有良好的跨平臺性和執行緒安全,它實現了統一事件源(即對I/O事件、訊號和定時事件提供統一的處理)。高效能分散式記憶體物件快取軟體memcached是使用libevent的著名案例。 libev

Linux使用gzip壓縮解壓檔案

Linux下gzip命令是用來壓縮檔案的。gzip不僅可以用來壓縮大的、較少使用的檔案以節省磁碟空間,還可以和tar命令一起構成Linux作業系統中比較流行的壓縮檔案格式。據統計,gzip命令對文字檔案有60%~70%的壓縮率。 gzip命令的格式是: gzip [option] [file] gz

Linux檢視檔案和資料夾大小的df和du命令聯絡區別

前面經常需要對Host裡的多個VM進行一些操作如take snapshot等,需要檢視容量時經常用到df -h,但是用到du  的比較少,當需要檢視具體的某個資料夾下的各個檔案 的大小時就需要用到du , 看了下面的介紹當使用 du -h --max-depth=1 wor

Linux程式設計------檔案IO(三) 檔案共享和fcntl函式

檔案共享 一個程序打開了兩個檔案 檔案表條目(file-table-entry):    1.檔案狀態標誌(file-status-flags): 讀/寫/追加/同步/

linux目錄許可權檢視修改以及檔案和目錄訪問許可權設定

檢視檔案許可權的語句:   在終端輸入: ls -l xxx.xxx (xxx.xxx是檔名)   那麼就會出現相類似的資訊,主要都是這些: -rw-rw-r--   一共有10位數   其中: 最前面那個 - 代表的是型別   中間那三個 rw- 代表的是所有者(user

Linuxproc檔案系統介紹應用

proc檔案系統的作用 (1) 核心專案太龐大,除錯困難,引入新的除錯方法。 (2) proc檔案系統的思路是:在核心中構建一個虛擬檔案系統/proc,核心執行時將核心中一些關鍵的資料結構以檔案的方式呈現在/proc目錄下的一些特定檔案中, 這樣相當於將不可見的核心中的資料結構以

使用Python進行檔案分割合併

使用Python來進行檔案的分割與合併是非常簡單的。 python程式碼如下: splitFile--將檔案分割成大小為chunksize的塊; mergeFile--將眾多檔案塊合併成原來的檔案; # coding=utf-8 import os,sys reload(

Linux tar命令總結:Linux檔案進行打包、壓縮並分割成指定大小

1、普通tar壓縮命令tar -zcvf andywang.tar.gz andywang//將andywang資料夾壓縮成andywang.tar.gz2、壓縮後的檔案太大,需要將andywang.tar.gz分割成N個指定大小的檔案split -b 4000M -d -a

tftpd32伺服器軟體在Windowslinux 檔案傳輸

tftpd32是一個很方便的傳輸檔案的伺服器端軟體,下面介紹這款軟體的使用: 以上是我的tftpd32中文版軟體介面;設定到伺服器介面; 使用一:可以通過tftpd32,進行Windows與虛擬機器中的Linux進行檔案傳輸: 1.開啟windows7(作者用的win7

Linux檔案描述符檔案指標及其區別

檔案描述符 在Linux系統中一切皆檔案。如果要對某個裝置進行操作,就不得不開啟此裝置檔案,只要你開啟檔案就會獲得該檔案的檔案描述符fd(file discriptor),這個檔案描述符就是一個整數。每個程序在PCB(Process Control Block