gsutil在从不同目录

时间:2018-02-23 21:03:19

标签: google-cloud-platform google-cloud-storage gcloud gsutil google-cloud-sdk

我在存储分区中有三个文件夹,每个文件夹都包含test_result_0.xml

  • gs://test-lab-12345-67890/2018-02-23_18:48:45.403202_urtc/Nexus6P-27-en_US-portrait/test_result_0.xml
  • gs://test-lab-12345-67890/2018-02-23_18:48:45.403202_urtc/Nexus7-21-en_US-portrait/test_result_0.xml
  • gs://test-lab-12345-67890/2018-02-23_18:48:45.403202_urtc/Nexus6P-23-en_US-portrait/test_result_0.xml

现在我想将它们复制到本地文件夹中,并将它们重命名为:

  • test_result_0.xml

  • test_result_1.xml

  • test_result_2.xml

使用bash脚本进行此操作的最佳方法是什么?到目前为止,我有这个,但它不起作用:(

for i in $("`gsutil ls gs://test-lab-12345-67890 | tail -1`*/*.xml"); do gsutil -m cp -r -U $i ~/Documents done

2 个答案:

答案 0 :(得分:1)

使用类似的东西解决它:



counter=0
for path in $(gsutil ls -r gs://test-lab-12345-67890/**/*.xml | tail -3); do
	counter=$((counter+1))
	gsutil -m cp -r -U $path ~/localpath
	mv ~/localpath/test_result_0.xml ~/localpath/test_result_$counter.xml
done




不是最漂亮的代码,但它现在有效..除非有人能为我提供更好的方法吗? :)

编辑:在文档中(我错过了)你可以指定:

  • --results-bucket=RESULTS_BUCKET]
  • --results-dir=RESULTS_DIR

这样可以完全缓解我现在能够提前指定文件夹名称的问题!我将保留旧代码以供参考。

High Level REST Java client

答案 1 :(得分:1)

我尝试使用AWK改进您的解决方案。 检查您是否更喜欢这种解决方案,我不知道您是否认为它更“优雅”:

gsutil ls -r gs://test-lab-12345-67890/**/test_result_* | awk -F"/" {'system("gsutil cp "$0" ~/localpath/"$6)'}

在我的测试环境中使用与您类似的文件和文件夹结构。

P.S。我没有使用您在解决方案中使用的许多gsutils标志来提高可读性,但如果您认为需要,可以添加它们。