2012-08-27 70 views
1

我有一種情況,我想從linux下的數千個目錄複製特定文件「transaction.log」,並生成一個包含相同特定文件的tar文件。Linux:從幾個目錄中複製一個文件

例子: 我有成千上萬的目錄下/用戶/富/目錄/

/user/foo/dirs/dir1 
/user/foo/dirs/dir2 
/user/foo/dirs/dir3 
.. 
.. 
.. 
/user/foo/dirs/dir50000 

在每一個目錄中,有幾個文件和文件transaction.log。我想從所有50000個目錄複製這個transaction.log文件,並將它們存儲在一個tar文件中。

如果有辦法,你可以幫我嗎?

謝謝。

SOLUTION:

Okies,我發現這個問題,因爲有一些sympolic鏈接到其他磁盤上找到的是不正常。解決方案是使用-follow選項和find來跟隨符號鏈接。謝謝。 我用下面的命令

找到。 -follow -type f -name「transaction.log」|焦油--create --files - 從 - > /foo/Stats_transaction_Object.tar.gz

+0

到目前爲止你所做的是什麼? – reptilicus

+0

你可以使用通配符。 $ tar -cvf tarname.tar /user/foo/dirs/dir*/transaction.log – pce

回答

0

假設你要存儲的目錄路徑,以及:

find /user/foo/dirs/ -name 'transaction.log' -exec tar rf /tmp/stuff.tar {} \; 

這將存儲中找到的每個transaction.log文件在/tmp/stuff.tar中的目錄結構中。

+0

謝謝。我試過你的建議,但創建的tar文件只有7743個包含'transaction.log'文件的目錄。我有大約50K包含這個文件的目錄。在做linux時是否有一些限制? – user981116

+0

Okies,我發現這個問題,因爲有一些sympolic鏈接到其他磁盤找不到工作。解決方案是使用-follow選項和find來跟隨符號鏈接。謝謝。 – user981116

2

帶{}的那個不錯,但它會爲每個文件運行一個單獨的tar過程。這是一個單一的焦油過程,所以這是相當快一點:

find /where/ever -name transaction.log -print | tar --create --files-from - > /somewhere/else/foo.tar 
+0

-print是缺省值,它可能會更高效地讓tar創建歸檔文件,而不是通過shell重定向來完成它... – njsf

+0

謝謝dstromberg。我試過你的建議,但創建的tar文件只有7747個包含'transaction.log'文件的目錄。我有大約50K包含這個文件的目錄。我注意到teppic的建議是7743個文件。在做linux時是否有一些限制? – user981116

+0

-print是一些find的默認值,尤其是GNU find。在其他find中沒有默認操作。 – dstromberg

1

你可以使用這個命令:

cd /user/foo/dirs/ 
find . -type f -name "transaction.log" | xargs tar -zcvf transaction_logs_backup.tar.gz 
+0

如果transaction.log文件列表的長度超過一個命令調用(通常爲4K)的xargs限制,那麼您將擁有不完整的存檔。 – njsf

0

查找/用戶/富/ -name迪爾斯transaction.log | tar -cv -T- -f /tmp/stuff.tar

相關問題