gsutil命令从上一天删除旧文件

时间:2017-12-07 12:30:23

标签: google-cloud-storage bucket gsutil

我在谷歌云存储中有一个存储桶。我有一个tmp文件夹。每天在此目录中创建数千个文件。我想删除每晚超过1天的文件。我找不到关于gsutil这个工作的论点。我不得不使用经典而简单的shell脚本来完成这项工作。但文件删除速度非常慢。

我在文件夹中累积了650K文件。必须删除540K。但我自己的shell脚本工作了1天,只能删除34K文件。

gsutil生命周期功能无法完全满足我的需求。他正在打扫整个水桶。我只想在某个文件夹的底部定期删除文件..同时我想更快地删除。

我愿意接受您的建议和帮助。我可以使用单个gsutil命令执行此操作吗?还是一种不同的方法?

我为测试创建的简单脚本(我准备暂时删除批量文件。)

    ## step 1 - I pull the files together with the date format and save them to the file list1.txt.
gsutil -m ls -la gs://mygooglecloudstorage/tmp/ | awk '{print $2,$3}' > /tmp/gsutil-tmp-files/list1.txt


## step 2 - I filter the information saved in the file list1.txt. Based on the current date, I save the old dated files to file list2.txt.
cat /tmp/gsutil-tmp-files/list1.txt | awk -F "T" '{print $1,$2,$3}' | awk '{print $1,$3}' | awk -F "#" '{print $1}' |grep -v `date +%F` |sort -bnr > /tmp/gsutil-tmp-files/list2.txt


## step 3 - After the above process, I add the gsutil delete command to the first line and convert it into a shell script.
cat /tmp/gsutil-tmp-files/list2.txt | awk '{$1 = "/root/google-cloud-sdk/bin/gsutil -m rm -r "; print}' > /tmp/gsutil-tmp-files/remove-old-files.sh


## step 4 - I'm set the script permissions and delete old lists.
chmod 755 /tmp/gsutil-tmp-files/remove-old-files.sh
rm -rf /tmp/gsutil-tmp-files/list1.txt /tmp/gsutil-tmp-files/list2.txt


## step 5 - I run the shell script and I destroy it after it is done.
/bin/sh /tmp/gsutil-tmp-files/remove-old-files.sh
rm -rf /tmp/gsutil-tmp-files/remove-old-files.sh

2 个答案:

答案 0 :(得分:2)

到目前为止,还没有一种简单的方法可以使用gsutil或对象生命周期管理。

话虽如此,您是否可以更改存储桶中对象的命名格式?也就是说,不是在“gs:// mybucket / tmp /”下全部上传它们,而是可以将当前日期附加到该前缀,从而产生类似“gs:// mybucket / tmp / 2017-12-27 /”的内容。 。这样做的主要优点是:

  • 不必为每个对象进行日期比较;您可以运行gsutil -m rm -r来查找这些前缀,然后对这些路径的最后部分进行日期比较。
  • 能够在命令行上提供较少数量的参数(前缀,而不是每个文件的名称)到{{1}},因此不太可能传递比shell更能处理的参数。

答案 1 :(得分:0)

有一种非常简单的方法,例如:

gsutil -m ls -l gs://bucket-name/ | grep 2017-06-23 | grep .jpg  | awk '{print $3}' | gsutil -m rm -I