2017-03-17 18 views
0

Google Cloud Platformにバケットがあります。フォルダ内のすべてのファイル。私は、ルートすなわちにフォルダ内のすべてのこれらのファイルを移動したい:グーグルクラウドプラットフォームのディレクトリをルートに移動

現在: /フォルダ/ [ファイルとフォルダ]

私が欲しい: /[ファイルやフォルダ]を

どのようにすることができます私はgsutilを使ってこれをしますか?

答えて

0

私は、これをすばやく行うための巧妙な方法はないと思う(1つのgsutilコマンドで読む)が、バケットの内容のリストをループし、各エントリに対してgsutil mvコマンドを実行することができます以下の下:あなたが大量のオブジェクトを持っている場合

$ # We have a lot of stuff in "folder1". 
$ BUCKET=mybucket 
$ gsutil ls gs://$BUCKET/** 
gs://mybucket/folder1/subfolder/testfile.txt 
gs://mybucket/folder1/testfile space.txt 
gs://mybucket/folder1/testfile.txt 
gs://mybucket/folder1/testfile2.txt 

# Move it all to the root of the bucket! 
# This approach accounts for spaces in object names. 
$ FOLDERNAME="folder1" 
$ gsutil ls "gs://$BUCKET/$FOLDERNAME/**" | while read objpath; do 
    newpath="$(echo $objpath | sed "s#$FOLDERNAME/##")" 
    gsutil mv "$objpath" "$newpath" 
    done 
[...] 

# And verify the results: 
$ gsutil ls gs://$BUCKET/** 
gs://mybucket/subfolder/testfile.txt 
gs://mybucket/testfile space.txt 
gs://mybucket/testfile.txt 
gs://mybucket/testfile2.txt 

注各MV操作のためのgsutil、1の連続実行を行い、かなり遅いこと。このスクリプトを使用すると、15個のオブジェクトを移動するのに38秒かかることがわかりました(オブジェクトあたり約2.5秒)。

関連する問題