ฉันมีบัคเก็ต/โฟลเดอร์ซึ่งมีไฟล์เข้ามามากมายทุกๆ นาที ฉันจะอ่านเฉพาะไฟล์ใหม่ตามการประทับเวลาของไฟล์ได้อย่างไร
เช่น แสดงรายการไฟล์ทั้งหมดที่มีการประทับเวลา > my_timestamp
ฉันมีบัคเก็ต/โฟลเดอร์ซึ่งมีไฟล์เข้ามามากมายทุกๆ นาที ฉันจะอ่านเฉพาะไฟล์ใหม่ตามการประทับเวลาของไฟล์ได้อย่างไร
เช่น แสดงรายการไฟล์ทั้งหมดที่มีการประทับเวลา > my_timestamp
นี่ไม่ใช่ฟีเจอร์ที่ gsutil หรือ GCS API มีให้ เนื่องจากไม่มีวิธีแสดงรายการออบเจ็กต์โดยการประทับเวลา
แต่คุณสมัครรับออบเจ็กต์ใหม่ได้โดยใช้ฟีเจอร์ GCS Cloud Pub/Sub แทน .
คุณสามารถใช้ bash-fu บ้าง:
gsutil ls -l gs://<your-bucket-name> | sort -k2n | tail -n1 | awk 'END {$1=$2=""; sub(/^[ \t]+/, ""); print }'
ทำลายมันลง:
# grab detailed list of objects in bucket
gsutil ls -l gs://your-bucket-name
# sort by number on the date field
sort -k2n
# grab the last row returned
tail -n1
# delete first two cols (size and date) and ltrim to remove whitespace
awk 'END {$1=$2=""; sub(/^[ \t]+/, ""); print }'`
ทดสอบกับ Google Cloud SDK v186.0.0
, gsutil v4.28
gsutil
ลงในคำตอบของฉันเพื่อให้ผู้คนได้รับแนวคิด
- person Jujhar Singh; 29.01.2018
gsutil ls -l gs://your-bucket-name | sort -k2 | tail -n2 | head -n1 | awk 'END {$1=$2=""; sub(/^[ \t]+/, ""); print }'
- person wearego; 01.08.2019
หากคุณสนใจไฟล์ใหม่หรือพูดอีกนัยหนึ่งคือไฟล์ที่ไม่มีอยู่ในที่เก็บข้อมูลปลายทางของคุณ หรือคุณสามารถใช้ตัวเลือก gsutil -n เนื่องจากจะคัดลอกเฉพาะไฟล์ที่ไม่ปรากฏในที่เก็บข้อมูลปลายทาง
จากเอกสาร https://cloud.google.com/storage/docs/gsutil/commands/cp?hl=ru
ไม่มีคนปิดบัง เมื่อระบุไว้ ไฟล์หรืออ็อบเจ็กต์ที่มีอยู่ที่ปลายทางจะไม่ถูกเขียนทับ รายการใดๆ ที่ถูกข้ามโดยตัวเลือกนี้จะถูกรายงานว่าถูกข้าม ตัวเลือกนี้จะดำเนินการคำขอ GET เพิ่มเติมเพื่อตรวจสอบว่ามีรายการอยู่หรือไม่ก่อนที่จะพยายามอัปโหลดข้อมูล วิธีนี้จะบันทึกข้อมูลที่ส่งซ้ำ แต่คำขอ HTTP เพิ่มเติมอาจทำให้การถ่ายโอนออบเจ็กต์ขนาดเล็กช้าลงและมีราคาแพงมากขึ้น
ข้อเสียของแนวทางนี้คือ มันส่งคำขอตรวจสอบสำหรับทุกไฟล์ที่อยู่ในที่เก็บข้อมูลต้นทางของคุณ