|
|
@@ -0,0 +1,46 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+set -e
|
|
|
+#set -x
|
|
|
+
|
|
|
+src="$1"
|
|
|
+dest="$2"
|
|
|
+
|
|
|
+if [ -z "$dest" ]; then
|
|
|
+ echo >&2 "usage: $0 src dest"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+seen_files=$(mktemp)
|
|
|
+
|
|
|
+mkdir -p "$dest" || true
|
|
|
+
|
|
|
+cur=$(ipfs name resolve --nocache "$src")
|
|
|
+
|
|
|
+ipfs ls "$cur" | while read HASH SIZE FILENAME; do
|
|
|
+ FILENAME="${FILENAME%$'\r'}"
|
|
|
+ dest_file="$dest/$FILENAME"
|
|
|
+
|
|
|
+ if [ -e "$dest_file" ]; then
|
|
|
+ ipfs_file_size=$(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"
|
|
|
+ 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
|
|
|
+ rm -f "$dest/$INTRUDER"
|
|
|
+done
|
|
|
+
|
|
|
+rm -f "$seen_files"
|
|
|
+rm -f "$after_files"
|
|
|
+
|
|
|
+echo "$cur"
|