2012-11-08 91 views
0

我在文件夾中的bash腳本中運行以下代碼片段。這會在沒有根文件夾的情況下創建一個存檔,因爲我在存檔內容的文件夾中運行腳本。Tar目錄內容沒有在存檔中創建根文件夾

tar -pczf $ARCHIVE_NAME --exclude=${ARCHIVE_NAME} --exclude=$(basename ${0}) * 

Archive Contents: 
/a/ 
/b/ 
/c/ 
/a_normal_file 

偉大的工程,但由於我使用*它不是隱藏在直接目錄中的隱藏文件。我做了一些搜索,發現archiving (ubuntu tar) hidden directories我已經那麼它改爲:「」

tar -pczf $ARCHIVE_NAME --exclude=${ARCHIVE_NAME} --exclude=$(basename ${0}) . 

Archive Contents: 
/./a/ 
/./b/ 
/./c/ 
/./.a_hidden_file 
/./a_normal_file 

仍然有效,但現在正與名稱爲創建的根文件夾字符。內容就在那裏。我如何得到我以前的結果,但它仍然存檔在直接目錄中的隱藏文件?

在此先感謝!

回答

1

雖然它不會影響歸檔的拆包(因爲.只是指相同的目錄),如果你煩惱,你可以通配符改變從*.[^.]* *包括所有隱藏的文件。

此外,如果您有以..開頭的隱藏文件,例如..a,則還需要將..?*添加到列表中。

+0

真棒感謝,學到新的東西每天! –

4

使用-C,--directory DIR

--directory=$(dirname ${0}) 

例子:

$ ls -a xxx 
. .. aaa .bbb 
$ tar cvf test.tar --exclude test.tar -C xxx . 
./ 
./.bbb 
./aaa 
+0

一些解釋將有助於這個答案 – dove

+0

我編輯答案添加一個例子。 「-C」參數在將文件列入歸檔之前更改當前工作目錄(因此文件具有相對路徑)。 「$(dirname $ {0})」是一個運行腳本的目錄(我認爲作者想將文件存檔到該目錄中)。 – csgwro

相關問題