#!/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='' "/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"