2012-11-08 64 views
2

想象一下,在這裏可能有人會知道發生了什麼事情,但基本上我需要做的就是創建一個目錄,並使一個tar文件省略兩個級別的子目錄(root/1/2 )。鑑於它需要在一堆平臺上工作,我認爲最簡單的方法就是做一個find和egrep這個目錄,這很好地給我一個文件列表。創建一個意外大的文件的對象

但是,然後我管該文件列表到xargs tar rvf命令和結果文件出來的東西像33GB。我試圖將查找輸出到一個文件,並使用該文件作爲輸入tar -T,它仍然出來約33GB,如果我做了整個目錄的直接焦油(不省略任何東西),它來到我的地方期待它在6海里。

對發生了什麼有什麼想法?或者如何解決這個問題?我真的需要弄清楚這一點,我猜測它必須提供一個文件列表,讓它只是打開一個目錄,但不知道如何解決這個問題。

+0

後您正在運行的命令行或腳本。 –

+0

你可以顯示你用來創建你的焦油的命令行嗎? – mvp

+0

當然,猜猜我應該從一開始就這樣做。由於我正在尋找'suite'目錄的內容,但沒有suite/tmp/Shared: 'rm archive.tar;找到suite -print | egrep -v「suite/tmp/Shared/*」| xargs tar rvf archive.tar' 然後寫入一個文件然後用它作爲輸入: 'find suite -print | egrep -v「套件的/ tmp /共享/ *「> LIST.TXT; tar cvf archive.tar -T list.txt' 這兩個都給出了一個archive.tar大約33gb – user1808617

回答

0

你find命令將返回目錄中的文件以及

考慮使用find查找目錄和排除一些

tar cvf /path/to/archive.tar $(find suite -type d ! -name 'suite/tmp/Shared/*') 
0

當您指定的文件列表中的目錄,tar軟件包的目錄和其中的所有文件。如果您然後單獨列出目錄中的文件,則會再次打包這些文件。如果列出子目錄,則會再次打包每個子目錄的內容。等等。

如果你打算做一個文件列表,確保它確實是一個文件列表,並且不包含任何目錄。

find . -type f ... 

省略號可能find選項,以消除子目錄中的文件,或者它可能是一個grep -v,消除他們。請注意,-name通常只匹配名稱的最後一個組件。 GNU find! -path '*/subdir/*'或變型,讓你消除文件基於路徑,而不是僅僅名稱:

find . -type f ! -path './root/1/2/*' -print