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