我們上傳東西的時候,由於文件過大而不能上傳,或者不給上傳,最明顯的就是發郵件了,附件最大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]
- [zhangy@BlackGhost awksed]$ rar a -v5m google.rar Google_Maps_API.doc //-v和5m之間不要有空格
- RAR 3.92 Copyright (c) 1993-2010 Alexander Roshal 10 Feb 2010
- Shareware version Type RAR -? for help
- Evaluation copy. Please register.
- Creating archive google.rar
- Adding Google_Maps_API.doc
- Calculating the control sum
- Creating archive google.part2.rar
- ... Google_Maps_API.doc
- Calculating the control sum
- Creating archive google.part3.rar
- ... Google_Maps_API.doc OK
- Calculating the control sum
- Done
- [zhangy@BlackGhost awksed]$ unrar x google.part1.rar //合並並解壓
- UNRAR 3.90 freeware Copyright (c) 1993-2009 Alexander Roshal
- Extracting from google.part1.rar
- Extracting Google_Maps_API.doc
- Extracting from google.part2.rar
- ... Google_Maps_API.doc 76%
- Extracting from google.part3.rar
- ... Google_Maps_API.doc OK
- 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)
- [zhangy@BlackGhost awksed]$ zip google.zip Google_Maps_API.doc //先壓縮不然就報上面的錯
- adding: Google_Maps_API.doc(deflated 12%)
- [zhangy@BlackGhost awksed]$ zip -s 4m google.zip --out ziptest //分卷
- copying: Google_Maps_API.doc
- [zhangy@BlackGhost awksed]$ zip ziptest -s 0 --out google_bak.zip //這樣合卷有問題
- copying: Google_Maps_API.doc
- [zhangy@BlackGhost awksed]$ cat ziptest.z* > google_bak.zip //利用cat來合卷
- [zhangy@BlackGhost awksed]$ unzip google_bak.zip //解壓
上面呢用zip來分卷是沒有問題的,但是合卷的時候就有問題了,zip -s 0 --out這樣的方式,合出來的卷,大約只有分卷前的一半,這就搞的我很無語了,並且解壓的時候,提示我輸入密碼,在次無語,只好有cat來合並了,還好合並后,解壓沒有任何問題。
三,利用split來分卷,cat來合並分卷
我花了很長時間去研究tar的參數,研究了好長時間,還是沒有找到可以分卷的參數,英語還是不過關啊,唉。不過我們可以借助split來分卷
- [zhangy@BlackGhost awksed]$ tar czvf google.tar.gz Google_Maps_API.doc
- Google_Maps_API.doc
- [zhangy@BlackGhost awksed]$ split -d -b 4m google.tar.gz
- [zhangy@BlackGhost awksed]$ cat x* > google_bak.tar.gz
- [zhangy@BlackGhost awksed]$ tar zxvf google_bak.tar.gz
- Google_Maps_API.doc
上圖說明
1,google.part1.rar等,是rar分卷壓縮后的結果
2,x00,x01等是利用split來分卷后的結果
3,ziptest.zip,ziptest.z01等是利用zip來分卷后的結果。
我始終相信tar 可以直接進行分卷的。只不過我沒有找到而已,下面是tar的參數,含有翻譯
- 主操作模式:
- -A, --catenate, --concatenate 追加 tar 文件至歸檔
- -c, --create 創建一個新歸檔
- -d, --diff, --compare 找出歸檔和文件系統的差異
- --delete 從歸檔(非磁帶!)中刪除
- -r, --append 追加文件至歸檔結尾
- -t, --list 列出歸檔內容
- --test-label 測試歸檔卷標並退出
- -u, --update 僅追加比歸檔中副本更新的文件
- -x, --extract, --get 從歸檔中解出文件
- 操作修飾符:
- --check-device 當創建增量歸檔時檢查設備號(默認)
- -g, --listed-incremental=文件處理新式的 GNU 格式的增量備份
- -G, --incremental 處理老式的 GNU 格式的增量備份
- --ignore-failed-read當遇上不可讀文件時不要以非零值退出
- -n, --seek 歸檔可檢索
- --no-check-device 當創建增量歸檔時不要檢查設備號
- --occurrence[=NUMBER] 僅處理歸檔中每個文件的第 NUMBER個事件;僅當與以下子命令 --delete,
- --diff, --extract 或是 --list中的一個聯合使用時,此選項才有效。而且不管文件列表是以命令行形式給出或是通過
- -T 選項指定的;NUMBER 值默認為 1
- --sparse-version=MAJOR[.MINOR]設置所用的離散格式版本(隱含--sparse)
- -S, --sparse 高效處理離散文件
- 重寫控制:
- -k, --keep-old-files 解壓時不要替換存在的文件
- --keep-newer-files不要替換比歸檔中副本更新的已存在的文件
- --no-overwrite-dir 保留已存在目錄的元數據
- --overwrite 解壓時重寫存在的文件
- --overwrite-dir解壓時重寫已存在目錄的元數據(默認)
- --recursive-unlink 解壓目錄之前先清除目錄層次
- --remove-files 在添加文件至歸檔后刪除它們
- -U, --unlink-first 在解壓要重寫的文件之前先刪除它們
- -W, --verify 在寫入以后嘗試校驗歸檔
- 選擇輸出流:
- --ignore-command-error 忽略子進程的退出代碼
- --no-ignore-command-error將子進程的非零退出代碼認為發生錯誤
- -O, --to-stdout 解壓文件至標准輸出
- --to-command=COMMAND將解壓的文件通過管道傳送至另一個程序
- 操作文件屬性:
- --atime-preserve[=METHOD]在輸出的文件上保留訪問時間,要么通過在讀取(默認
- METHOD=‘replace’)后還原時間,要不就不要在第一次(METHOD=‘system’)設置時間
- --delay-directory-restore 直到解壓結束才設置修改時間和所解目錄的權限
- --group=名稱 強制將 NAME作為所添加的文件的組所有者
- --mode=CHANGES 強制將所添加的文件(符號)更改為權限CHANGES
- --mtime=DATE-OR-FILE 從 DATE-OR-FILE 中為添加的文件設置mtime
- -m, --touch 不要解壓文件的修改時間
- --no-delay-directory-restore取消 --delay-directory-restore 選項的效果
- --no-same-owner 將文件解壓為您所有
- --no-same-permissions從歸檔中解壓權限時使用用戶的掩碼位(默認為普通用戶服務)
- --numeric-owner 總是以數字代表用戶/組的名稱
- --owner=名稱 強制將 NAME作為所添加的文件的所有者
- -p, --preserve-permissions, --same-permissions解壓文件權限信息(默認只為超級用戶服務)
- --preserve 與 -p 和 -s 一樣
- --same-owner 嘗試解壓時保持所有者關系一致
- -s, --preserve-order, --same-order為解壓至匹配歸檔排序名稱
- 設備選擇和切換:
- -f, --file=ARCHIVE 使用歸檔文件或 ARCHIVE 設備
- --force-local即使歸檔文件存在副本還是把它認為是本地歸檔
- -F, --info-script=名稱, --new-volume-script=名稱在每卷磁帶最后運行腳本(隱含 -M)
- -L, --tape-length=NUMBER 寫入 NUMBER × 1024 字節后更換磁帶
- -M, --multi-volume 創建/列出/解壓多卷歸檔文件
- --rmt-command=COMMAND 使用指定的 rmt COMMAND 代替 rmt
- --rsh-command=COMMAND 使用遠程 COMMAND 代替 rsh
- --volno-file=文件 使用/更新 FILE 中的卷數
- 設備分塊:
- -b, --blocking-factor=BLOCKS 每個記錄 BLOCKS x 512 字節
- -B, --read-full-records 讀取時重新分塊(只對 4.2BSD 管道有效)
- -i, --ignore-zeros 忽略歸檔中的零字節塊(即文件結尾)
- --record-size=NUMBER 每個記錄的字節數 NUMBER,乘以 512
- 選擇歸檔格式:
- -H, --format=FORMAT 創建指定格式的歸檔
- FORMAT 是以下格式中的一種:
- gnu GNU tar 1.13.x 格式
- oldgnu GNU 格式 as per tar <= 1.12
- pax POSIX 1003.1-2001 (pax) 格式
- posix 等同於 pax
- ustar POSIX 1003.1-1988 (ustar) 格式
- v7 old V7 tar 格式
- --old-archive, --portability等同於 --format=v7
- --pax-option=關鍵字[[:]=值][,關鍵字[[:]=值]]...控制 pax 關鍵字
- --posix 等同於 --format=posix
- -V, --label=TEXT 創建帶有卷名 TEXT的歸檔;在列出/解壓時,使用 TEXT作為卷名的模式串
- 壓縮選項:
- -a, --auto-compress 使用歸檔后綴來決定壓縮程序
- -I, --use-compress-program=PROG通過 PROG 過濾(必須是能接受 -d選項的程序)
- -j, --bzip2 通過 bzip2 過濾歸檔
- --lzma 通過 lzma 過濾歸檔
- --no-auto-compress do not use archive suffix to determine thecompression program
- -z, --gzip, --gunzip, --ungzip 通過 gzip 過濾歸檔
- -Z, --compress, --uncompress 通過 compress 過濾歸檔
- -J, --xz filter the archive through xz
- --lzop 通過 lzop 過濾歸檔
- 本地文件選擇:
- --add-file=文件 添加指定的 FILE 至歸檔(如果名字以 -開始會很有用的)
- --backup[=CONTROL] 在刪除前備份,選擇 CONTROL 版本
- -C, --directory=DIR 改變至目錄 DIR
- --exclude=PATTERN 排除以 PATTERN 指定的文件
- --exclude-caches 除標識文件本身外,排除包含CACHEDIR.TAG 的目錄中的內容
- --exclude-caches-all 排除包含 CACHEDIR.TAG 的目錄
- --exclude-caches-under 排除包含 CACHEDIR.TAG的目錄中所有內容
- --exclude-tag=文件 除 FILE 自身外,排除包含 FILE的目錄中的內容
- --exclude-tag-all=文件 排除包含 FILE 的目錄
- --exclude-tag-under=文件 排除包含 FILE的目錄中的所有內容
- --exclude-vcs 排除版本控制系統目錄
- -h, --dereference跟蹤符號鏈接;將它們所指向的文件歸檔並輸出
- --hard-dereference 跟蹤硬鏈接;將它們所指向的文件歸檔並輸出
- -K, --starting-file=MEMBER-NAME從歸檔中的 MEMBER-NAME 成員處開始
- --newer-mtime=DATE 當只有數據改變時比較數據和時間
- --no-null 禁用上一次的效果 --null 選項
- --no-recursion 避免目錄中的自動降級
- --no-unquote 不以 -T 讀取的文件名作為引用結束
- --null -T 讀取以空終止的名字,-C 禁用
- -N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE只保存比 DATE-OR-FILE 更新的文件
- --one-file-system 創建歸檔時保存在本地文件系統中
- -P, --absolute-names 不要從文件名中清除引導符‘/’
- --recursion 目錄遞歸(默認)
- --suffix=STRING 在刪除前備份,除非被環境變量SIMPLE_BACKUP_SUFFIX覆蓋,否則覆蓋常用后綴(‘’)
- -T, --files-from=文件 從 FILE中獲取文件名來解壓或創建文件
- --unquote 以 -T讀取的文件名作為引用結束(默認)
- -X, --exclude-from=文件 排除 FILE 中列出的模式串
- 文件名變換:
- --strip-components=NUMBER 解壓時從文件名中清除 NUMBER個引導部分
- --transform=EXPRESSION, --xform=EXPRESSION使用 sed 代替 EXPRESSION 來進行文件名變換
- 文件名匹配選項(同時影響排除和包括模式串):
- --anchored 模式串匹配文件名頭部
- --ignore-case 忽略大小寫
- --no-anchored 模式串匹配任意‘/’后字符(默認對
- exclusion 有效)
- --no-ignore-case 匹配大小寫(默認)
- --no-wildcards 逐字匹配字符串
- --no-wildcards-match-slash 通配符不匹配‘/’
- --wildcards 使用通配符(默認對 exclusion )
- --wildcards-match-slash通配符匹配‘/’(默認對排除操作有效)
- 提示性輸出:
- --checkpoint[=NUMBER] 每隔 NUMBER個記錄顯示進度信息(默認為 10 個)
- --checkpoint-action=ACTION 在每個檢查點上執行 ACTION
- --index-file=文件 將詳細輸出發送至 FILE
- -l, --check-links只要不是所有鏈接都被輸出就打印信息
- --no-quote-chars=STRING 禁用來自 STRING 的字符引用
- --quote-chars=STRING 來自 STRING 的額外的引用字符
- --quoting-style=STYLE 設置名稱引用風格;有效的 STYLE值請參閱以下說明
- -R, --block-number 每個信息都顯示歸檔內的塊數
- --show-defaults 顯示 tar 默認選項
- --show-omitted-dir 列表或解壓時,列出每個不匹配查找標准的目錄
- --show-transformed-names, --show-stored-names顯示變換后的文件名或歸檔名
- --totals[=SIGNAL] 處理歸檔后打印出總字節數;當此SIGNAL 被觸發時帶參數 -打印總字節數;允許的信號為:
- SIGHUP,SIGQUIT,SIGINT,SIGUSR1 和
- SIGUSR2;同時也接受不帶 SIG
- 前綴的信號名稱
- --utc 以 UTC 格式打印文件修改信息
- -v, --verbose 詳細地列出處理的文件
- -w, --interactive, --confirmation每次操作都要求確認
- 兼容性選項:
- -o 創建歸檔時,相當於
- --old-archive;展開歸檔時,相當於
- --no-same-owner
- 其它選項:
- -?, --help 顯示此幫助列表
- --restrict 禁用某些潛在的有危險的選項
- --usage 顯示簡短的用法說明
- --version 打印程序版本
- 長選項和相應短選項具有相同的強制參數或可選參數。
- 除非以 --suffix 或 SIMPLE_BACKUP_SUFFIX
- 設置備份后綴,否則備份后綴就是“~”。
- 可以用 --backup 或 VERSION_CONTROL 設置版本控制,可能的值為:
- none, off 從不做備份
- t, numbered 進行編號備份
- nil, existing
- 如果編號備份存在則進行編號備份,否則進行簡單備份
- never, simple 總是使用簡單備份
-------
Linux中關於tar分卷壓縮和合並的使用?
以每卷500M為例
tar分卷壓縮:tar cvzpf - somedir | split -d -b 500m (-d不是split的選項,是shell的選項,表
示將tar命令的輸出作為split的輸入)
tar多卷合並:cat x* > mytarfile.tar.gz
--------------------------
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
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -
# 這個動作有點像是 cp -r /etc /tmp 啦~依舊是有其有用途的!
# 要注意的地方在於輸出檔變成 - 而輸入檔也變成 - ,又有一個 | 存在~
# 這分別代表 standard output, standard input 與管線命令啦!
# 這部分我們會在 Bash shell 時,再次提到這個指令跟大家再解釋啰