sync_ipns 868 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/bin/bash
  2. set -e
  3. #set -x
  4. src="$1"
  5. dest="$2"
  6. if [ -z "$dest" ]; then
  7. echo >&2 "usage: $0 src dest"
  8. exit 1
  9. fi
  10. seen_files=$(mktemp)
  11. mkdir -p "$dest" || true
  12. cur=$(ipfs name resolve --nocache "$src")
  13. ipfs ls "$cur" | while read HASH SIZE FILENAME; do
  14. FILENAME="${FILENAME%$'\r'}"
  15. dest_file="$dest/$FILENAME"
  16. if [ -e "$dest_file" ]; then
  17. ipfs_file_size=$(ipfs files stat --format='<size>' "/ipfs/$HASH")
  18. if [ $( stat -c %s "$dest_file") -eq "$ipfs_file_size" ]; then
  19. echo $FILENAME >> "$seen_files"
  20. continue
  21. fi
  22. fi
  23. echo >&2 "Retrieving $HASH => $dest_file"
  24. ipfs cat "$HASH" > "$dest_file"
  25. echo $FILENAME >> "$seen_files"
  26. done
  27. after_files=$(mktemp)
  28. ls "$dest" > "$after_files"
  29. comm --nocheck-order -13 "$seen_files" "$after_files" | while read INTRUDER; do
  30. rm -f "$dest/$INTRUDER"
  31. done
  32. rm -f "$seen_files"
  33. rm -f "$after_files"
  34. echo "$cur"