linux輸出文字檔 - linux顯示絕對路徑




打開一個目錄,但不要在存檔中存儲完整的絕對路徑 (3)

以下命令將創建一個根目錄“。”。 並將指定目錄中的所有文件放入其中。

tar -cjf site1.tar.bz2 -C /var/www/site1 .

如果你想把所有的文件放在tar文件的根目錄下,@chinthaka是正確的。 只需進入目錄並執行以下操作:

tar -cjf target_path/file.tar.gz *

這會將cwd中的所有文件作為根文件存放在tar文件中。

我在備份shell腳本的部分有以下命令:

tar -cjf site1.bz2 /var/www/site1/

當我列出檔案的內容時,我得到:

tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html

但是我想從存檔中的目錄和文件名中刪除部分/var/www/site1 ,以簡化提取並避免無用的常量目錄結構。 永遠不要知道,以防萬一我在Web數據未存儲在/var/www下的地方提取備份網站。

對於上面的例子,我想要:

tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html

所以,當我提取時,文件在當前目錄中被提取,並且我不需要在之後移動提取的文件,並且保留了子目錄結構。

stackoverflow和web上的其他地方,已經有很多關於tar和備份的問題,但是他們中的大多數都會要求刪除整個子目錄結構(拼合),或者添加或刪除名稱中的首字母/不知道在提取時它究竟發生了什麼變化),但沒有更多。

在閱讀了一些在這里和那裡發現的解決方案以及手冊後,我試著:

tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/

但他們沒有一個按我想要的方式工作。 有些什麼都不做,其他一些不再存檔子目錄。

它位於由Cron啟動的備份shell腳本中,所以我不太清楚,哪個用戶運行它,路徑和當前目錄是什麼,因此總是需要寫入絕對路徑,並且不希望更改當前目錄以避免在腳本中進一步突破(因為它不僅備份網站,還有數據庫,然後將所有內容髮送到FTP等)

如何實現這一目標?

我剛剛誤解了選項-C如何工作?


似乎很多人誤解了tar中的-C選項。

tar target_path/file.tar.gz -C source_path/source_dir .

要么

tar target_path/file.tar.gz -C source_path/source_dir

不會刪除生成的tar.gz文件中的絕對路徑前綴。

最簡單的解決方案是cd到source_path(source_dir的父目錄)並運行

tar target_path/file.tar.gz source_dir

在你的腳本中。 這將刪除生成的tar.gz文件的目錄結構中的絕對路徑前綴。


tar -cjf site1.tar.bz2 -C /var/www/site1 .

在上面的例子中,在做它的事情之前,tar會變成目錄/var/www/site1 ,因為選項-C /var/www/site1被給出了。

man tar

OTHER OPTIONS

  -C, --directory DIR
       change to directory DIR




tar