我在存储分区中有三个文件夹,每个文件夹都包含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
答案 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
这样可以完全缓解我现在能够提前指定文件夹名称的问题!我将保留旧代码以供参考。
答案 1 :(得分:1)
我尝试使用AWK改进您的解决方案。 检查您是否更喜欢这种解决方案,我不知道您是否认为它更“优雅”:
gsutil ls -r gs://test-lab-12345-67890/**/test_result_* | awk -F"/" {'system("gsutil cp "$0" ~/localpath/"$6)'}
在我的测试环境中使用与您类似的文件和文件夹结构。
P.S。我没有使用您在解决方案中使用的许多gsutils标志来提高可读性,但如果您认为需要,可以添加它们。