Googleのクラウドストレージにバケットがあります。バケツにtmpフォルダがあります。毎日このディレクトリに何千ものファイルが作成されています。毎晩1日以上経過したファイルを削除したい。私はこの仕事のためにgsutilに関する議論を見つけることができませんでした。これを行うには、古典的でシンプルなシェルスクリプトを使用しなければなりませんでした。しかし、ファイルは非常にゆっくり削除されています。最後の日から古いファイルを削除するgsutilコマンド
フォルダに650Kのファイルが蓄積されています。それらのうち540Kは削除する必要があります。しかし、自分のシェルスクリプトは1日働いていて、34Kファイルしか削除できませんでした。
gsutilライフサイクル機能は、私が望むものを正確に行うことができません。彼はバケツ全体をきれいにしています。私はちょうど特定のフォルダの底に定期的にファイルを削除したい。同時に私は削除をより速くしたいと思う。
私はあなたの提案とあなたの助けにお答えします。 1つの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
私はgcsfuseツールで私のバケットを装着することにより、この問題を解決しました。ローカルディスクのようにバケツを管理できるようになりました。しかし、ディスク上で多くの操作を実行するのはまだ遅いです。それでも、私はすぐにそれをクリアすることができます。 gcsfuseの詳細については、 https://cloud.google.com/storage/docs/gcs-fuse しかし、私はGoogleがこれらのニーズに自動解決策を必要としていると思います。 同様の問題を抱える人もこの方法を使用できます。私はこの点でより良い方法を持っている人々の新しいアイデアを公開しています。 – spala