linux下分卷壓縮,合並解壓的3種方法


我們上傳東西的時候,由於文件過大而不能上傳,或者不給上傳,最明顯的就是發郵件了,附件最大5M,有的10M。如果超過了就郁悶了。這個時候,如果能把壓縮的東西,分割開來就比較爽了,windows下面我想大家知道怎么分割,利用winrar,winzip圖型化設置壓縮出來的塊的大小。但是在linux下面有沒有這樣的方法了,linux下面有rar命令,有zip命令,windows下面這二種方式可以分割壓縮,我想linux下面絕對也是可以的。下面是我嘗試過程的記錄:

 

一,rar分卷壓縮和合並解壓

rar -h

我們會發現以下參數,要創建多大的卷。

v             Create volumes with size autodetection or list all volumes
v<size>[k,b]  Create volumes with size=<size>*1000 [*1024, *1]

  1. [zhangy@BlackGhost awksed]$ rar a -v5m google.rar Google_Maps_API.doc  //-v和5m之間不要有空格  
  2.   
  3. RAR 3.92   Copyright (c) 1993-2010 Alexander Roshal   10 Feb 2010  
  4. Shareware version         Type RAR -? for help  
  5.   
  6. Evaluation copy. Please register.  
  7.   
  8. Creating archive google.rar  
  9.   
  10. Adding    Google_Maps_API.doc  
  11. Calculating the control sum       
  12.   
  13. Creating archive google.part2.rar  
  14.   
  15. ...       Google_Maps_API.doc  
  16. Calculating the control sum       
  17.   
  18. Creating archive google.part3.rar  
  19.   
  20. ...       Google_Maps_API.doc                                         OK  
  21. Calculating the control sum  
  22. Done  
  23. [zhangy@BlackGhost awksed]$ unrar x google.part1.rar //合並並解壓  
  24.   
  25. UNRAR 3.90 freeware      Copyright (c) 1993-2009 Alexander Roshal  
  26.   
  27. Extracting from google.part1.rar  
  28.   
  29. Extracting  Google_Maps_API.doc                                            
  30.   
  31. Extracting from google.part2.rar  
  32.   
  33. ...         Google_Maps_API.doc                                       76%  
  34.   
  35. Extracting from google.part3.rar  
  36.   
  37. ...         Google_Maps_API.doc                                       OK  
  38. All OK  

二,zip分卷壓縮和合並解壓

zip -h2

你會發現,分卷參數-s,意思是說分割成多大的卷

Splits (archives created as a set of split files):
-s ssize  create split archive with splits of size ssize,where ssize nm
n number and m multiplier (kmgt, default m), 100k -> 100 kB

下面的意思是說如果是分卷的了,用 -s 0 --out把分卷合成一個

If input is split, output will default to same split size
Use -s=0 or -s- to turn off splitting to convert split to single file:
zip in_split_archive -s 0 --out out_single_file_archive

用zip來分卷壓縮時,他必須是.zip的形勢,他的流程是這樣的,先把一般文件壓縮成.zip的文件,然后在將.zip的文件分成多少塊,如果你不這樣坐呢,會提示錯誤的。

[zhangy@BlackGhost awksed]$ zip -s 4m Google_Maps_API.doc
zip error: Invalid command arguments (archive name must end in .zip for splits)

  1. [zhangy@BlackGhost awksed]$ zip google.zip Google_Maps_API.doc //先壓縮不然就報上面的錯  
  2.   adding: Google_Maps_API.doc(deflated 12%)  
  3. [zhangy@BlackGhost awksed]$ zip -s 4m google.zip --out ziptest   //分卷  
  4.  copying: Google_Maps_API.doc  
  5. [zhangy@BlackGhost awksed]$ zip ziptest -s 0 --out google_bak.zip  //這樣合卷有問題  
  6. copying: Google_Maps_API.doc  
  7. [zhangy@BlackGhost awksed]$ cat ziptest.z* > google_bak.zip //利用cat來合卷  
  8. [zhangy@BlackGhost awksed]$ unzip google_bak.zip  //解壓  

上面呢用zip來分卷是沒有問題的,但是合卷的時候就有問題了,zip -s 0 --out這樣的方式,合出來的卷,大約只有分卷前的一半,這就搞的我很無語了,並且解壓的時候,提示我輸入密碼,在次無語,只好有cat來合並了,還好合並后,解壓沒有任何問題。

三,利用split來分卷,cat來合並分卷

我花了很長時間去研究tar的參數,研究了好長時間,還是沒有找到可以分卷的參數,英語還是不過關啊,唉。不過我們可以借助split來分卷

  1. [zhangy@BlackGhost awksed]$ tar czvf google.tar.gz Google_Maps_API.doc  
  2. Google_Maps_API.doc  
  3. [zhangy@BlackGhost awksed]$ split -d -b 4m google.tar.gz  
  4. [zhangy@BlackGhost awksed]$ cat x* > google_bak.tar.gz  
  5. [zhangy@BlackGhost awksed]$ tar zxvf google_bak.tar.gz  
  6. Google_Maps_API.doc  
分卷壓縮

分卷壓縮

上圖說明

1,google.part1.rar等,是rar分卷壓縮后的結果

2,x00,x01等是利用split來分卷后的結果

3,ziptest.zip,ziptest.z01等是利用zip來分卷后的結果。

我始終相信tar 可以直接進行分卷的。只不過我沒有找到而已,下面是tar的參數,含有翻譯

  1.  主操作模式:  
  2.   
  3.  -A, --catenate, --concatenate   追加 tar 文件至歸檔  
  4.  -c, --create               創建一個新歸檔  
  5.  -d, --diff, --compare      找出歸檔和文件系統的差異  
  6.  --delete               從歸檔(非磁帶!)中刪除  
  7.  -r, --append               追加文件至歸檔結尾  
  8.  -t, --list                 列出歸檔內容  
  9.  --test-label           測試歸檔卷標並退出  
  10.  -u, --update               僅追加比歸檔中副本更新的文件  
  11.  -x, --extract, --get       從歸檔中解出文件  
  12.   
  13.  操作修飾符:  
  14.  --check-device         當創建增量歸檔時檢查設備號(默認)  
  15.  -g, --listed-incremental=文件處理新式的 GNU 格式的增量備份  
  16.  -G, --incremental          處理老式的 GNU 格式的增量備份  
  17.  --ignore-failed-read當遇上不可讀文件時不要以非零值退出  
  18.  -n, --seek                 歸檔可檢索  
  19.  --no-check-device      當創建增量歸檔時不要檢查設備號  
  20.  --occurrence[=NUMBER]  僅處理歸檔中每個文件的第 NUMBER個事件;僅當與以下子命令 --delete,  
  21.  --diff, --extract 或是 --list中的一個聯合使用時,此選項才有效。而且不管文件列表是以命令行形式給出或是通過  
  22.  -T 選項指定的;NUMBER 值默認為 1  
  23.  --sparse-version=MAJOR[.MINOR]設置所用的離散格式版本(隱含--sparse)  
  24.  -S, --sparse               高效處理離散文件  
  25.   
  26.  重寫控制:  
  27.   
  28.  -k, --keep-old-files       解壓時不要替換存在的文件  
  29.  --keep-newer-files不要替換比歸檔中副本更新的已存在的文件  
  30.  --no-overwrite-dir     保留已存在目錄的元數據  
  31.  --overwrite            解壓時重寫存在的文件  
  32.  --overwrite-dir解壓時重寫已存在目錄的元數據(默認)  
  33.  --recursive-unlink     解壓目錄之前先清除目錄層次  
  34.  --remove-files         在添加文件至歸檔后刪除它們  
  35.  -U, --unlink-first         在解壓要重寫的文件之前先刪除它們  
  36.  -W, --verify               在寫入以后嘗試校驗歸檔  
  37.   
  38.  選擇輸出流:  
  39.   
  40.  --ignore-command-error 忽略子進程的退出代碼  
  41.  --no-ignore-command-error將子進程的非零退出代碼認為發生錯誤  
  42.  -O, --to-stdout            解壓文件至標准輸出  
  43.  --to-command=COMMAND將解壓的文件通過管道傳送至另一個程序  
  44.  操作文件屬性:  
  45.   
  46.  --atime-preserve[=METHOD]在輸出的文件上保留訪問時間,要么通過在讀取(默認  
  47.  METHOD=‘replace’)后還原時間,要不就不要在第一次(METHOD=‘system’)設置時間  
  48.  --delay-directory-restore 直到解壓結束才設置修改時間和所解目錄的權限  
  49.  --group=名稱         強制將 NAME作為所添加的文件的組所有者  
  50.  --mode=CHANGES         強制將所添加的文件(符號)更改為權限CHANGES  
  51.  --mtime=DATE-OR-FILE   從 DATE-OR-FILE 中為添加的文件設置mtime  
  52.  -m, --touch                不要解壓文件的修改時間  
  53.  --no-delay-directory-restore取消 --delay-directory-restore 選項的效果  
  54.  --no-same-owner        將文件解壓為您所有  
  55.  --no-same-permissions從歸檔中解壓權限時使用用戶的掩碼位(默認為普通用戶服務)  
  56.  --numeric-owner        總是以數字代表用戶/組的名稱  
  57.  --owner=名稱         強制將 NAME作為所添加的文件的所有者  
  58.  -p, --preserve-permissions, --same-permissions解壓文件權限信息(默認只為超級用戶服務)  
  59.  --preserve             與 -p 和 -s 一樣  
  60.  --same-owner           嘗試解壓時保持所有者關系一致  
  61.  -s, --preserve-order, --same-order為解壓至匹配歸檔排序名稱  
  62.   
  63.  設備選擇和切換:  
  64.   
  65.  -f, --file=ARCHIVE         使用歸檔文件或 ARCHIVE 設備  
  66.  --force-local即使歸檔文件存在副本還是把它認為是本地歸檔  
  67.  -F, --info-script=名稱, --new-volume-script=名稱在每卷磁帶最后運行腳本(隱含 -M)  
  68.  -L, --tape-length=NUMBER   寫入 NUMBER × 1024 字節后更換磁帶  
  69.  -M, --multi-volume         創建/列出/解壓多卷歸檔文件  
  70.  --rmt-command=COMMAND  使用指定的 rmt COMMAND 代替 rmt  
  71.  --rsh-command=COMMAND  使用遠程 COMMAND 代替 rsh  
  72.  --volno-file=文件    使用/更新 FILE 中的卷數  
  73.   
  74.  設備分塊:  
  75.   
  76.  -b, --blocking-factor=BLOCKS   每個記錄 BLOCKS x 512 字節  
  77.  -B, --read-full-records    讀取時重新分塊(只對 4.2BSD 管道有效)  
  78.  -i, --ignore-zeros         忽略歸檔中的零字節塊(即文件結尾)  
  79.  --record-size=NUMBER   每個記錄的字節數 NUMBER,乘以 512  
  80.   
  81.  選擇歸檔格式:  
  82.   
  83.  -H, --format=FORMAT        創建指定格式的歸檔  
  84.   
  85.  FORMAT 是以下格式中的一種:  
  86.   
  87.  gnu                      GNU tar 1.13.x 格式  
  88.  oldgnu                   GNU 格式 as per tar <= 1.12  
  89.  pax                      POSIX 1003.1-2001 (pax) 格式  
  90.  posix                    等同於 pax  
  91.  ustar                    POSIX 1003.1-1988 (ustar) 格式  
  92.  v7                       old V7 tar 格式  
  93.   
  94.  --old-archive, --portability等同於 --format=v7  
  95.  --pax-option=關鍵字[[:]=值][,關鍵字[[:]=值]]...控制 pax 關鍵字  
  96.  --posix                等同於 --format=posix  
  97.  -V, --label=TEXT           創建帶有卷名 TEXT的歸檔;在列出/解壓時,使用 TEXT作為卷名的模式串  
  98.   
  99.  壓縮選項:  
  100.   
  101.  -a, --auto-compress        使用歸檔后綴來決定壓縮程序  
  102.  -I, --use-compress-program=PROG通過 PROG 過濾(必須是能接受 -d選項的程序)  
  103.  -j, --bzip2                通過 bzip2 過濾歸檔  
  104.  --lzma                 通過 lzma 過濾歸檔  
  105.  --no-auto-compress     do not use archive suffix to determine thecompression program  
  106.  -z, --gzip, --gunzip, --ungzip   通過 gzip 過濾歸檔  
  107.  -Z, --compress, --uncompress   通過 compress 過濾歸檔  
  108.   
  109.  -J, --xz                   filter the archive through xz  
  110.  --lzop                 通過 lzop 過濾歸檔  
  111.   
  112.  本地文件選擇:  
  113.   
  114.  --add-file=文件      添加指定的 FILE 至歸檔(如果名字以 -開始會很有用的)  
  115.  --backup[=CONTROL]     在刪除前備份,選擇 CONTROL 版本  
  116.  -C, --directory=DIR        改變至目錄 DIR  
  117.  --exclude=PATTERN      排除以 PATTERN 指定的文件  
  118.  --exclude-caches       除標識文件本身外,排除包含CACHEDIR.TAG 的目錄中的內容  
  119.  --exclude-caches-all   排除包含 CACHEDIR.TAG 的目錄  
  120.  --exclude-caches-under 排除包含 CACHEDIR.TAG的目錄中所有內容  
  121.  --exclude-tag=文件   除 FILE 自身外,排除包含 FILE的目錄中的內容  
  122.  --exclude-tag-all=文件   排除包含 FILE 的目錄  
  123.  --exclude-tag-under=文件   排除包含 FILE的目錄中的所有內容  
  124.  --exclude-vcs          排除版本控制系統目錄  
  125.  -h, --dereference跟蹤符號鏈接;將它們所指向的文件歸檔並輸出  
  126.  --hard-dereference 跟蹤硬鏈接;將它們所指向的文件歸檔並輸出  
  127.  -K, --starting-file=MEMBER-NAME從歸檔中的 MEMBER-NAME 成員處開始  
  128.  --newer-mtime=DATE     當只有數據改變時比較數據和時間  
  129.  --no-null              禁用上一次的效果 --null 選項  
  130.  --no-recursion         避免目錄中的自動降級  
  131.  --no-unquote           不以 -T 讀取的文件名作為引用結束  
  132.  --null                 -T 讀取以空終止的名字,-C 禁用  
  133.  -N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE只保存比 DATE-OR-FILE 更新的文件  
  134.  --one-file-system      創建歸檔時保存在本地文件系統中  
  135.  -P, --absolute-names       不要從文件名中清除引導符‘/’  
  136.  --recursion            目錄遞歸(默認)  
  137.  --suffix=STRING        在刪除前備份,除非被環境變量SIMPLE_BACKUP_SUFFIX覆蓋,否則覆蓋常用后綴(‘’)  
  138.  -T, --files-from=文件    從 FILE中獲取文件名來解壓或創建文件  
  139.  --unquote              以 -T讀取的文件名作為引用結束(默認)  
  140.  -X, --exclude-from=文件  排除 FILE 中列出的模式串  
  141.   
  142.  文件名變換:  
  143.   
  144.  --strip-components=NUMBER   解壓時從文件名中清除 NUMBER個引導部分  
  145.  --transform=EXPRESSION, --xform=EXPRESSION使用 sed 代替 EXPRESSION 來進行文件名變換  
  146.   
  147.  文件名匹配選項(同時影響排除和包括模式串):  
  148.   
  149.  --anchored             模式串匹配文件名頭部  
  150.  --ignore-case          忽略大小寫  
  151.  --no-anchored          模式串匹配任意‘/’后字符(默認對  
  152.  exclusion 有效)  
  153.  --no-ignore-case       匹配大小寫(默認)  
  154.  --no-wildcards         逐字匹配字符串  
  155.  --no-wildcards-match-slash   通配符不匹配‘/’  
  156.  --wildcards            使用通配符(默認對 exclusion )  
  157.  --wildcards-match-slash通配符匹配‘/’(默認對排除操作有效)  
  158.   
  159.  提示性輸出:  
  160.   
  161.  --checkpoint[=NUMBER]  每隔 NUMBER個記錄顯示進度信息(默認為 10 個)  
  162.  --checkpoint-action=ACTION   在每個檢查點上執行 ACTION  
  163.  --index-file=文件    將詳細輸出發送至 FILE  
  164.  -l, --check-links只要不是所有鏈接都被輸出就打印信息  
  165.  --no-quote-chars=STRING   禁用來自 STRING 的字符引用  
  166.  --quote-chars=STRING   來自 STRING 的額外的引用字符  
  167.  --quoting-style=STYLE  設置名稱引用風格;有效的 STYLE值請參閱以下說明  
  168.  -R, --block-number         每個信息都顯示歸檔內的塊數  
  169.  --show-defaults        顯示 tar 默認選項  
  170.  --show-omitted-dir 列表或解壓時,列出每個不匹配查找標准的目錄  
  171.  --show-transformed-names, --show-stored-names顯示變換后的文件名或歸檔名  
  172.  --totals[=SIGNAL]      處理歸檔后打印出總字節數;當此SIGNAL 被觸發時帶參數 -打印總字節數;允許的信號為:  
  173.  SIGHUP,SIGQUIT,SIGINT,SIGUSR1 和  
  174.  SIGUSR2;同時也接受不帶 SIG  
  175.  前綴的信號名稱  
  176.  --utc                  以 UTC 格式打印文件修改信息  
  177.  -v, --verbose              詳細地列出處理的文件  
  178.  -w, --interactive, --confirmation每次操作都要求確認  
  179.   
  180.  兼容性選項:  
  181.   
  182.  -o                         創建歸檔時,相當於  
  183.  --old-archive;展開歸檔時,相當於  
  184.  --no-same-owner  
  185.   
  186.  其它選項:  
  187.   
  188.  -?, --help                 顯示此幫助列表  
  189.  --restrict             禁用某些潛在的有危險的選項  
  190.  --usage                顯示簡短的用法說明  
  191.  --version              打印程序版本  
  192.   
  193. 長選項和相應短選項具有相同的強制參數或可選參數。  
  194.   
  195. 除非以 --suffix 或 SIMPLE_BACKUP_SUFFIX  
  196. 設置備份后綴,否則備份后綴就是“~”。  
  197. 可以用 --backup 或 VERSION_CONTROL 設置版本控制,可能的值為:  
  198.   
  199.  none, off       從不做備份  
  200.  t, numbered     進行編號備份  
  201.  nil, existing  
  202. 如果編號備份存在則進行編號備份,否則進行簡單備份  
  203.  never, simple   總是使用簡單備份 

 

-------

Linux中關於tar分卷壓縮和合並的使用?

以每卷500M為例
tar分卷壓縮:tar cvzpf - somedir | split -d -b 500m (-d不是split的選項,是shell的選項,表
示將tar命令的輸出作為split的輸入)
tar多卷合並:cat x* > mytarfile.tar.gz

 

--------------------------

linux解壓 tar命令
tar命令

tar [-cxtzjvfpPN] 文件與目錄 ....
參數:
-c :建立一個壓縮文件的參數指令(create 的意思);
-x :解開一個壓縮文件的參數指令!
-t :查看 tarfile 里面的文件!
特別注意,在參數的下達中, c/x/t 僅能存在一個!不可同時存在!
因為不可能同時壓縮與解壓縮。
-z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮?
-j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮?
-v :壓縮的過程中顯示文件!這個常用,但不建議用在背景執行過程!
-f :使用檔名,請留意,在 f 之后要立即接檔名喔!不要再加參數!
   例如使用『 tar -zcvfP tfile sfile』就是錯誤的寫法,要寫成
   『 tar -zcvPf tfile sfile』才對喔!
-p :使用原文件的原來屬性(屬性不會依據使用者而變)
-P :可以使用絕對路徑來壓縮!
-N :比后面接的日期(yyyy/mm/dd)還要新的才會被打包進新建的文件中!
--exclude FILE:在壓縮的過程中,不要將 FILE 打包!
范例:
范例一:將整個 /etc 目錄下的文件全部打包成為 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc<==僅打包,不壓縮!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc<==打包后,以 gzip 壓縮
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc<==打包后,以 bzip2 壓縮
# 特別注意,在參數 f 之后的文件檔名是自己取的,我們習慣上都用 .tar 來作為辨識。
# 如果加 z 參數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file ~
# 如果加 j 參數,則以 .tar.bz2 來作為附檔名啊~
# 上述指令在執行的時候,會顯示一個警告訊息:
# 『tar: Removing leading `/" from member names』那是關於絕對路徑的特殊設定。

范例二:查閱上述 /tmp/etc.tar.gz 文件內有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
# 由於我們使用 gzip 壓縮,所以要查閱該 tar file 內的文件時,
# 就得要加上 z 這個參數了!這很重要的!

范例三:將 /tmp/etc.tar.gz 文件解壓縮在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
# 在預設的情況下,我們可以將壓縮檔在任何地方解開的!以這個范例來說,
# 我先將工作目錄變換到 /usr/local/src 底下,並且解開 /tmp/etc.tar.gz ,
# 則解開的目錄會在 /usr/local/src/etc 呢!另外,如果您進入 /usr/local/src/etc
# 則會發現,該目錄下的文件屬性與 /etc/ 可能會有所不同喔!

范例四:在 /tmp 底下,我只想要將 /tmp/etc.tar.gz 內的 etc/passwd 解開而已
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
# 我可以透過 tar -ztvf 來查閱 tarfile 內的文件名稱,如果單只要一個文件,
# 就可以透過這個方式來下達!注意到! etc.tar.gz 內的根目錄 / 是被拿掉了!

范例五:將 /etc/ 內的所有文件備份下來,並且保存其權限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
# 這個 -p 的屬性是很重要的,尤其是當您要保留原本文件的屬性時!

范例六:在 /home 當中,比 2005/06/01 新的文件才備份
[root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home

范例七:我要備份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

范例八:將 /etc/ 打包后直接解開在 /tmp 底下,而不產生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -
# 這個動作有點像是 cp -r /etc /tmp 啦~依舊是有其有用途的!
# 要注意的地方在於輸出檔變成 - 而輸入檔也變成 - ,又有一個 | 存在~
# 這分別代表 standard output, standard input 與管線命令啦!
# 這部分我們會在 Bash shell 時,再次提到這個指令跟大家再解釋啰

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM