1. 程式人生 > >tar 解壓,重新命名

tar 解壓,重新命名

1、tar: Removing leading `/’ from member names   問題:

首先應該明確:*nix系統中,使用tar對檔案打包時,一般不建議使用絕對路徑。通常是在兩臺環境相似的機器上進行同步複製的時候,才有需要使用絕對路徑進行打包。使用絕對路徑打包時如果不指定相應的引數,tar會產生一句警告資訊:"tar: Removing leading `/’ from member names"
並且實際產生的壓縮包會將絕對路徑轉化為相對路徑。

[email protected] ~ # tar -czvf robin.tar.gz /home/robin
tar: Removing leading `/' from member names
/home/robin/
/home/robin/file1
/home/robin/file2
/home/robin/file3
[email protected]
~ # tar -xzvf robin.tar.gz drwxr-xr-x robin/root 0 2009-11-10 18:51:31 home/robin/ -rw-r--r-- robin/root 0 2009-11-10 18:51:28 home/robin/file1 -rw-r--r-- robin/root 0 2009-11-10 18:51:30 home/robin/file2 -rw-r--r-- robin/root 0 2009-11-10 18:51:31 home/robin/file3 [email protected]
~ #
結論:使用絕對路徑壓縮後,在解壓的時候,會在當前目錄生成一個絕對路徑的目錄結構。

對於這樣的壓縮包,解壓方法是使用引數 “-C”指解壓的目錄為根目錄(“/”):

tar -xzvf robin.tar.gz -C /
更為可靠的方法是在打包和解開的時候都使用引數 -P:
[email protected] ~ # tar -czvPf robin.tar.gz /home/robin/
/home/robin/
/home/robin/file1
/home/robin/file2
/home/robin/file3

[email protected] ~ # tar -xzvPf robin.tar.gz
/home/robin/
/home/robin/file1
/home/robin/file2
/home/robin/file3
[email protected]
~ #

:壓縮、解壓時避免絕對路徑

使用兩步的方式:

cd $LOG_DIR  && tar -czf "$DATE_OLD".tar.gz  "$s_file"

而不用這種絕對路徑的壓縮方式:
tar -czf "$DATE_OLD".tar.gz  "$LOG_DIR/$s_file"

2、解壓後重命名:

linux上壓縮一個檔案,然後scp到另一個伺服器,之後解壓的時候想重新命名,這似乎不支援。找了tar命令,發現tar -O:將檔案解開到標準輸出,於是就有了下面的方式解壓後重命名:

tar -xzf 2016-11-21.tar.gz -O > a.txt

3、壓縮、傳遞:

日常工作中需要經常從遠端或本地伺服器拷貝/移動大量檔案。遇到檔案比較多比較散的時候速度較慢,所以在想有沒有較快的方式。經過蒐羅、整理、驗證,大概有以下幾種。


首先,無論本地還是遠端,需要移動或拷貝的檔案較多且都不太大時,用cp命令和mv命令效率較低,可以先使用tar工具對將要拷貝/移動的內容進行打包/壓縮,之後再進行拷貝/移動,最後再解包/解壓縮。


另外,也是很關鍵的一個技巧,即,不必在tar打包/壓縮完畢之後再進行拷貝,解包/解壓縮,可以通過管道一邊打包/壓縮另一邊執行拷貝解包/解壓縮。


比如,tar命令可以和nc命令結合可以快速在兩臺機器之間傳輸檔案和目錄:
B機器:
nc -l 5555 |tar -C /tmp/test/ -xf -
A機器:
tar cf - /tmp/test/ |nc B'IP 5555
上述步驟將A機器/tmp/test/下的內容拷貝到B機器對應的目錄中,其中tar cf - /tmp/test/ |nc B'IP 5555 將內容邊打包邊通過管道和nc命令傳輸到由對應IP地址和5555埠傳到B機器,nc -l 5555 |tar -C /tmp/test/ -xf - 監聽本機的555埠,並將接收到的內容解包至指定的目錄(-C引數指定目標目錄)




此外,tar還可與scp、ssh命令結合:
在A機打包後,複製到B機器並解包
tar -cf - /tmp/test | ssh B'IP "cd /tmp; tar -xf -"
在A機打包,並將打包好的檔案複製到B機
tar -cf - /tmp/test | ssh B'IP "cd /tmp; cat - > test.tar"
tar -cf - /tmp/test | scp - B'[email protected]'IP:/tmp
將A機的打包檔案,複製到B機並解包
zcat test.tar | ssh B'IP "cd /tmp; tar -xf -"


也可以直接在本地這麼使用:
cd /tmp/test1
tar -cf - . | (cd /tmp/test2 ; tar -xvpf -)
但有人試驗後得出結論本地直接用cp較快


另外一些小技巧:
拷貝時除了拷貝單個檔案還會拷貝目錄,有時需要連同檔案/目錄的屬性一同拷貝。可以在cp命令中使用-R引數遞迴拷貝目錄,使用-p引數拷貝檔案保留屬性(預設是:mode,ownership,timestamps也可以通過 --preserve[=ATTR_LIST]指定要特別保留的屬性如:context, links,xattr, all),使用-d引數拷貝檔案保留連線。或者簡單的使用-a引數(相當於使用-dR --preserve=all)


如果想看到拷貝大量小檔案的進度可以寫一個簡單的小指令碼:
cd /tmp/test
for i in *
do
cp $i 目標目錄
echo $i is ok....

相關推薦

tar 重新命名

1、tar: Removing leading `/’ from member names   問題: 首先應該明確:*nix系統中,使用tar對檔案打包時,一般不建議使用絕對路徑。通常是在兩臺環境相似的機器上進行同步複製的時候,才有需要使用絕對路徑進行打包。使用絕對路徑打

Linux(centos/fedora/redhat/ubuntu....)下如何安裝rpm,deb檔案如何編譯安裝*.tar.gz檔案

RPM格式軟體包的安裝 1.簡介 幾乎所有的Linux發行版本都使用某種形式的軟體包管理安裝、更新和解除安裝軟體。與直接從原始碼安裝相比,軟體包管理易於安裝和解除安裝;易於更新已安裝的軟體包;易於保護配置檔案;易於跟蹤已安裝檔案。 RPM全稱是Red Hat Package Manager(Red Hat

tar檔案至標準輸出一邊一邊dd

tar有一個引數為-O,可以解壓至標準輸出,可以配合管道符號做一些神奇的事情 配合dd指令,一邊解壓映象包一邊dd到u盤中 tar zxOf file.tar.gz | dd of =/dev/

tar報錯

tar 在解壓jdk時,報錯如下:[[email protected]/* */_22_86_centos tools]# tar xf jdk-8u144-linux-x64.tar.gz gzip: stdin: not in gzip formattar: Child returned

升級Linux tar &&解決某用tar失敗的tar

更新 文件名 發現 目錄 ftp 估計 決定 bin div 今天解壓個文件,出來很多這樣的: /bin/tar: Ignoring unknown extended header keyword `SCHILY.dev‘/bin/tar: Ignoring unknown

tar

輸出 處理 apach href ros lan family ofo not tar打包和解壓到指定目錄的方法 tar zxvf ab.tar.gz -C cc tar xzf ab.tar.gz 直接解壓到當前目錄 tar -zxv -f ab.tar.gz 直接

java 小工具之--zip包刪除目錄及文件、

str 備份 odin .get flag source input director 使用 import org.apache.tools.ant.BuildException;import org.apache.tools.ant.Project;import org

續寫vimshell腳本基礎編輯read命令if與case判斷語句文件查找方式壓縮與

退出 hist match 時間戳 語法錯誤 margin 基本概念 相同 reg 一、 Vim續寫 ?1、命令擴展模式的位置定界 ??起始位置 cmd 終止位置???Cmd:????y復制????d刪除????Gu變大寫????gu變小寫??例如:0y$命令意味著:

python壓縮以及存數據庫的相關操作

alt zipfile hide end tdi hid write port pat zipfile實現壓縮整個目錄和子目錄 import os,shutil,zipfile,glob def dfs_get_zip_file(input_path,result):

轉載:linux tar 命令總結

linu 追加 tar.gz 備忘 標準輸出 需要 中一 意思 檔案 把常用的tar解壓命令總結下,當作備忘: tar -c: 建立壓縮檔案 -x:解壓 -t:查看內容 -r:向壓縮歸檔文件末尾追加文件 -u:更新原壓縮包中的文件 這五個是獨立的命令,壓縮解壓都要用到其中

linux tar 出錯

exit span erro pos child 報錯 style oot eva 今天用tar -xzvf php-7.2.3.tar.gz 解壓php的tar包時報錯 [root@VM_72_37_centos ~]# tar -xzvf php-7.2.3.tar.

把常用的tar命令總結下

tar -c: 建立壓縮檔案 -x:解壓 -t:檢視內容 -r:向壓縮歸檔檔案末尾追加檔案 -u:更新原壓縮包中的檔案 這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。下面的引數是根據需要在壓縮或解壓檔案時可選的。 -z

如何利用winrar製作自自動執行檔案格式的壓縮包

操作提前:電腦安裝WinRAR軟體。 將用來製作的資料放在資料夾內,然後用Ctrl+A全選該資料夾下的檔案。 單擊滑鼠右鍵,然後選擇“新增到壓縮檔案”選項。 在開啟的對話方塊“常規”選項卡中,單擊“壓縮方式”下拉框選擇合適的壓縮方式,並將壓縮選項下的“建立自解壓格式壓縮檔案”選項勾選,這時候會發現“

tar 報錯

日常運維中,在安裝某些軟體包時需要先進行解壓,但是解壓時出現了報錯,錯誤內容如下: [[email protected] ~]# tar -zxvf php-5.6.38.tar.gz gzip: stdin: not in gzip formattar: Child returne

tar 到指定目錄、去除前導目錄

去除目錄結構加上 --strip-components N 解壓到指定目錄,可以加引數-C 目標目錄 tar -xvf eg.tar -C /data/dst   一起使用 sudo tar xjvf targetNFS_multichannel.lsh.test --

Linux使用tar.tar.bz2檔案:報錯(原因)tar: Child returned status 2 tar: Error is not recoverable: exiting now

tar -jxvf xxxx.tar.bz2 如下報錯: tar (child): bzip2:無法 exec: 沒有那個檔案或目錄 tar (child): Error is not recoverable: exiting now tar: Child returned stat

linux用tar檔案Cannot open: No such file or directory

在阿里雲上搭建大資料平臺,解壓 zookeeper-3.4.10.tar.gz時報錯如下: tar: zookeeper-3.4.10: Cannot mkdir: Permission denied tar: zookeeper-3.4.10/ivysettings.xml: Can

小程式筆記(一)獲取wxapkg還原專案。

<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post"

Linux使用tar.tar.bz2檔案:報錯(原因)

tar -jxvf xxxx.tar.bz2 如下報錯: tar (child): bzip2:無法 exec: 沒有那個檔案或目錄 tar (child): Error is not recoverable: exiting now tar: Child r

linux tar 報錯解決方法

在解壓tar.gz檔案的時候報錯 1 2 3 4 5 [[email protected] Downloads]$ tar -zxvf clion-141.351.4.tar.gz gzip: stdin: not in gz