You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

45 lines
1.3 KiB

  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. export INCOMING="${INCOMING:-/data/incoming/}"
  4. export MOVER_WORKING_DIR="${MOVER_WORKING_DIR:-/data/mover-work/}"
  5. export UPLOAD_QUEUE="${UPLOAD_QUEUE:-/data/upload-queue/}"
  6. export MEGABYTES_PER_CHUNK="${MEGABYTES_PER_CHUNK:-$((1024*100))}"
  7. export BYTES_PER_CHUNK=$((1024*1024*MEGABYTES_PER_CHUNK))
  8. mkdir -p "${MOVER_WORKING_DIR}"
  9. mkdir -p "${UPLOAD_QUEUE}"
  10. mkdir -p "${INCOMING}"
  11. while [[ 1 ]] ; do
  12. mkdir -p "${MOVER_WORKING_DIR}/current"
  13. export cur_size=$( du -B1 -s "${MOVER_WORKING_DIR}/current" | grep -oE "^[0-9]+" )
  14. find "${INCOMING}" -type f -not -name ".*"\
  15. | while read -r filename
  16. do
  17. # skip partial uploads
  18. if [[ "${filename}" =~ rsync-tmp ]]
  19. then
  20. continue
  21. fi
  22. echo "Moving ${filename}"
  23. export cur_size=$((cur_size + $( du -B1 -s "${filename}" | grep -oE "^[0-9]+" )))
  24. mkdir -p "${MOVER_WORKING_DIR}/current"
  25. mv -v "${filename}" "${MOVER_WORKING_DIR}/current/"
  26. if [[ "${cur_size}" -gt "${BYTES_PER_CHUNK}" ]]; then
  27. timestamp=$( date +'%Y%m%d%H%M%S' )
  28. uuid=$(cat /proc/sys/kernel/random/uuid | cut -d- -f1)
  29. echo "Current archive is full, moving to ${timestamp}_${uuid}."
  30. mv "${MOVER_WORKING_DIR}/current" "${UPLOAD_QUEUE}/${timestamp}_${uuid}"
  31. export cur_size=0
  32. fi
  33. done
  34. echo "Sleeping 30 seconds..."
  35. sleep 30
  36. done