#!/bin/bash set -euo pipefail ############################################################ # Script: pinall.sh # # Description: # This script reads a list of S3 object keys (filenames) # from a file, downloads each file from Backblaze B2, # adds it to a local IPFS node, and optionally cleans up # the temporary downloaded file to save disk space. # # Usage: # ./pinall.sh # Example: # # sudo -u ipfs env IPFS_PATH=/mnt/blockstorage/ipfs pinall.sh /home/ipfs/filenames.txt # # - files.txt should contain one S3 key per line. # - Lines starting with '#' or empty lines are ignored. # # Environment: # - Requires `b2` CLI configured with B2 credentials. # - Requires an IPFS node installed and accessible at # $IPFS_PATH (set in script). # # Behavior: # 1. Reads each key from the input file. # 2. Downloads the file from B2 to /tmp/. # 3. Adds the downloaded file to IPFS (CID version 1). # 4. Deletes the temporary file after adding to IPFS. # 5. Logs progress with timestamps to stdout. # # Exit Codes: # - 0: All files processed successfully. # - 1: Incorrect usage or missing input file. # ############################################################ # Usage check if [ $# -ne 1 ]; then echo "Usage: $0 " exit 1 fi ipfs id echo "Using IPFS_PATH=$IPFS_PATH" FILELIST=$1 while IFS= read -r KEY; do [[ -z "$KEY" || "$KEY" =~ ^# ]] && continue echo "[$(date +"%Y-%m-%d %H:%M:%S")] Downloading $KEY from B2..." TMPFILE="/tmp/$KEY" if b2 file download "b2://futureporn/$KEY" "$TMPFILE"; then echo "[$(date +"%Y-%m-%d %H:%M:%S")] Download complete: $KEY" else echo "[$(date +"%Y-%m-%d %H:%M:%S")] Download failed: $KEY" rm -f "$TMPFILE" continue fi echo "[$(date +"%Y-%m-%d %H:%M:%S")] Adding $KEY to IPFS..." ipfs add --cid-version=1 "$TMPFILE" # optional cleanup to save space rm -f "$TMPFILE" done < "$FILELIST" echo "[$(date +"%Y-%m-%d %H:%M:%S")] All tasks complete."