2016-11-09 302 views
-1

我在OSX(或Linux)上使用NOUNZ data compiler,它會自動生成靜態HTML文件的大量目錄結構(數十萬甚至數百萬個文件)。如何使用CLI在AWS S3上正確解壓縮和解壓縮目標和壓縮文件層次結構?

生成的目錄樹的一個簡單的例子看起來像下面...

enter image description here

通常情況下,如果我想整個樹移動到遠程Web服務器,我只是焦油和壓縮樹中,使用這樣的命令:

tar -cvf HTML.tar HTML 
gzip HTML.tar 

這產生焦油-ED和壓縮文件稱爲HTML.tar.gz

我可以然後FTP或SCP上述文件到所述遠程web服務器,我可以使用下面的命令簡單地解壓縮一個解壓縮該文件:

gzip -d HTML.tar.gz 
tar -xvf HTML.tar 

這將導致在Web服務器上的完全相同的文件樹這是由本地計算機上的數據編譯器生成的。

問題:我想使用亞馬遜網絡服務(AWS)簡單存儲解決方案(S3)模擬與上述相同的行爲。

我的問題:什麼是模仿相同(或類似的行爲)的最佳途徑,在那裏我可以移動從本地服務器到AWS S3整個焦油編輯和壓縮樹,然後解壓縮和解壓我文件重新創建整個目錄結構?

targzip命令不是S3 CLI API的一部分,因此我需要找到一種移動可能包含數百萬個文件(每天可能發生一次)的目錄結構的可靠方法。如果沒有首先進行目標壓縮,移動和重新創建所有內容都會非常緩慢。

注意:僅當數據編譯器運行時,它會刪除整個舊樹並重新生成一個新的樹,從而爲所有目錄和文件創建全新的inode。這意味着「增量」副本和同步不可行。我需要每次移動整棵樹。

+0

你說它重新創建所有文件,但文件內容實際上是否改變?您可以使用md5散列進行同步,以使用'aws s3 sync'命令檢查文件是否實際更改。 –

+0

是的,現有文件的內容可能會改變。編譯器運行時可能發生三種結果:1)可以添加新的文件夾和/或文件; 2)現有文件夾和/或文件可能被刪除; 3)現有的文件內容可能(並且經常)改變;請記住,「AWS s3同步」可能需要很長時間才能在管道中泵送數百萬個文件。 –

回答

0

S3不會爲您解壓縮文件。您必須將文件推送到S3,以便您希望S3將它們存儲在S3中。aws s3 sync命令(或基於MD5哈希執行增量更新的類似工具)將成爲您的最佳選擇。您可能可以將同步命令拆分爲多個並行同步命令。也許每個子目錄運行一個進程。

關於您的評論aws s3 sync「可能需要很長時間才能在管道中抽取數百萬個文件」,如果您尚未在EC2上執行此操作,則應先將這些文件壓縮並將它們推送到EC2服務器。您應該在與S3存儲區相同的區域使用EC2服務器,該存儲區類型爲10Gbps network performance,並且EC2服務器應啓用Enhanced Networking。這將使您可以儘快與S3連接。

+0

這聽起來「功能性」,但並不像清潔,簡單或高效,只需進行目標,壓縮,發送,解壓縮,解壓縮。與爲每個目錄分割{aws s3 sync}相比,必須有更好的方法,尤其是在每個新編譯器運行時,新目錄可能會動態顯示並且舊目錄可能會被刪除。我想知道AWS是否足夠聰明,可以將更多基本的unix命令添加到S3 CLI中,從而使其更加用戶友好和兼容。 –

+0

您應該可以編寫腳本來根據目錄生成同步任務。您不應該需要對目錄進行硬編碼。它可能並不像你想要的那麼幹淨或簡單,但是如果你想使用S3,你將不得不接受所涉及的限制條款,並且不要試圖像Unix服務器那樣對待它。 S3只是存儲,而不是你所暗示的「服務器」。它不能爲你解壓縮文件,因爲這需要CPU使用率,S3不提供。 –

+0

我很感激幫助,並且可以看到您的建議可以正常工作,但您必須承認,由於缺少一些應該已經存在的簡單CLI命令,這聽起來非常像黑客攻擊。 –