gsutil在从不同目录复制文件时重命名文件

问题描述 投票:2回答:2

我在存储桶中有三个文件夹,每个文件夹包含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

google-cloud-platform google-cloud-storage gcloud gsutil google-cloud-sdk
2个回答
1
投票

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

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

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

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


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

所以这完全缓解了我现在遇到的问题,因为我现在可以提前指定文件夹名称!我将保留旧代码以供参考。

https://cloud.google.com/sdk/gcloud/reference/alpha/firebase/test/android/run

© www.soinside.com 2019 - 2024. All rights reserved.