gsutil 命令删除前一天的旧文件
gsutil command to delete old files from last day
我在 google 云存储中有一个存储桶。我在存储桶中有一个 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 ,}' > /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 ,,}' | awk '{print ,}' | awk -F "#" '{print }' |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 '{ = "/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
截至目前,还没有使用 gsutil 或对象生命周期管理来执行此操作的简单方法。
话虽如此,您是否可以更改存储桶中对象的命名格式?也就是说,您可以将当前日期附加到该前缀,而不是将它们全部上传到 "gs://mybucket/tmp/" 下,从而产生类似 "gs://mybucket/tmp/2017-12-27/" 的结果。这样做的主要优点是:
- 不必为每个对象都进行日期比较;您可以 运行
gsutil ls "gs://mybucket/tmp/" | grep "gs://[^/]\+/tmp/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/$"
找到这些前缀,然后对这些路径的最后部分进行日期比较。
- 能够在命令行上向
gsutil -m rm -r
提供较少数量的参数(前缀,而不是每个单独文件的名称),因此传递的参数比 [=] 的可能性更小24=] 可以处理。
有一个非常简单的方法可以做到这一点,例如:
gsutil -m ls -l gs://bucket-name/ | grep 2017-06-23 | grep .jpg | awk '{print }' | gsutil -m rm -I
我在 google 云存储中有一个存储桶。我在存储桶中有一个 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 ,}' > /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 ,,}' | awk '{print ,}' | awk -F "#" '{print }' |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 '{ = "/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
截至目前,还没有使用 gsutil 或对象生命周期管理来执行此操作的简单方法。
话虽如此,您是否可以更改存储桶中对象的命名格式?也就是说,您可以将当前日期附加到该前缀,而不是将它们全部上传到 "gs://mybucket/tmp/" 下,从而产生类似 "gs://mybucket/tmp/2017-12-27/" 的结果。这样做的主要优点是:
- 不必为每个对象都进行日期比较;您可以 运行
gsutil ls "gs://mybucket/tmp/" | grep "gs://[^/]\+/tmp/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/$"
找到这些前缀,然后对这些路径的最后部分进行日期比较。 - 能够在命令行上向
gsutil -m rm -r
提供较少数量的参数(前缀,而不是每个单独文件的名称),因此传递的参数比 [=] 的可能性更小24=] 可以处理。
有一个非常简单的方法可以做到这一点,例如:
gsutil -m ls -l gs://bucket-name/ | grep 2017-06-23 | grep .jpg | awk '{print }' | gsutil -m rm -I