73 lines
2.0 KiB
Bash
73 lines
2.0 KiB
Bash
#!/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 <file-with-s3-keys>
|
|
# 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/<key>.
|
|
# 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 <file-with-s3-keys>"
|
|
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."
|