|
@@ -0,0 +1,44 @@
|
|
|
|
|
+#!/bin/bash
|
|
|
|
|
+
|
|
|
|
|
+set -e
|
|
|
|
|
+#set -x
|
|
|
|
|
+
|
|
|
|
|
+src="$1"
|
|
|
|
|
+dest="$2"
|
|
|
|
|
+
|
|
|
|
|
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
|
|
|
|
+
|
|
|
|
|
+if [ -z "$dest" ]; then
|
|
|
|
|
+ echo >&2 "usage: $0 src dest"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+seen_files=$(mktemp)
|
|
|
|
|
+
|
|
|
|
|
+mkdir -p "$dest" || true
|
|
|
|
|
+
|
|
|
|
|
+$DIR/ipfs ls "$src" | while read HASH SIZE FILENAME; do
|
|
|
|
|
+ FILENAME="${FILENAME%$'\r'}"
|
|
|
|
|
+ dest_file="$dest/$FILENAME"
|
|
|
|
|
+
|
|
|
|
|
+ if [ -e "$dest_file" ]; then
|
|
|
|
|
+ ipfs_file_size=$($DIR/ipfs files stat --format='<size>' "/ipfs/$HASH")
|
|
|
|
|
+ if [ $( stat -c %s "$dest_file") -eq "$ipfs_file_size" ]; then
|
|
|
|
|
+ echo $FILENAME >> "$seen_files"
|
|
|
|
|
+ continue
|
|
|
|
|
+ fi
|
|
|
|
|
+ fi
|
|
|
|
|
+ echo >&2 "Retrieving $HASH => $dest_file"
|
|
|
|
|
+ $DIR/ipfs cat "$HASH" > "$dest_file"
|
|
|
|
|
+ echo $FILENAME >> "$seen_files"
|
|
|
|
|
+done
|
|
|
|
|
+
|
|
|
|
|
+after_files=$(mktemp)
|
|
|
|
|
+ls "$dest" > "$after_files"
|
|
|
|
|
+
|
|
|
|
|
+comm --nocheck-order -13 "$seen_files" "$after_files" | while read INTRUDER; do
|
|
|
|
|
+ echo rm -f "$dest/$INTRUDER"
|
|
|
|
|
+done
|
|
|
|
|
+
|
|
|
|
|
+rm -f "$seen_files"
|
|
|
|
|
+rm -f "$after_files"
|