我在谷歌云存储中有一个存储桶。我有一个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
答案 0 :(得分:2)
到目前为止,还没有一种简单的方法可以使用gsutil或对象生命周期管理。
话虽如此,您是否可以更改存储桶中对象的命名格式?也就是说,不是在“gs:// mybucket / tmp /”下全部上传它们,而是可以将当前日期附加到该前缀,从而产生类似“gs:// mybucket / tmp / 2017-12-27 /”的内容。 。这样做的主要优点是:
gsutil -m rm -r
来查找这些前缀,然后对这些路径的最后部分进行日期比较。答案 1 :(得分:0)
有一种非常简单的方法,例如:
gsutil -m ls -l gs://bucket-name/ | grep 2017-06-23 | grep .jpg | awk '{print $3}' | gsutil -m rm -I