New paste Repaste Download
#!/bin/bash
# Configuration
src_dir=/tmp/tmsu
#src_dir=/home/user/hydrus_export
dest_dir=/home/user/tmsufiles
tmsu_db=/home/user/.tmsu/db
formats=("jpg" "jpeg" "png" "gif" "mp4" "webm" "tiff")
# Verify dependencies
if ! command -v b3sum &> /dev/null; then
    echo "Error: b3sum is required but not installed." >&2
    exit 1
fi
if ! command -v tmsu &> /dev/null; then
    echo "Error: TMSU is required but not installed." >&2
    exit 1
fi
# Create destination directory if it doesn't exist
mkdir -p "$dest_dir" || exit 1
# Process files
cd "$src_dir" || exit 1
for format in "${formats[@]}"; do
    while IFS= read -r -d '' f; do
        # Skip empty results
        [ -f "$f" ] || continue
        # 1. Extract base name without extension
        base=$(basename "$f" ".$format")
        
        # 2. Remove duplicate avoidance patterns (numbers in parentheses)
        clean_base=$(echo "$base" | sed -E 's/ \([0-9]+\)$//')
        
        # 3. Extract tags (split on spaces, exclude empty elements)
        IFS=' ' read -r -a tags_array <<< "$clean_base"
        
        # Filter out any empty elements from tags_array
        filtered_tags=()
        for tag in "${tags_array[@]}"; do
            if [ -n "$tag" ]; then
                filtered_tags+=("$tag")
            fi
        done
        
        # 4. Compute BLAKE3 hash
        hash=$(b3sum "$f" | awk '{print $1}')
        newname="$hash.$format"
        # 5. Copy with conflict handling
        if cp --update=none "$f" "$dest_dir/$newname"; then
            # 6. Tag only if copy succeeded and tags exist
            if [ ${#filtered_tags[@]} -ne 0 ]; then
                tmsu --database="$tmsu_db" tag "$dest_dir/$newname" "${filtered_tags[@]}"
            else
                echo "No tags found for: $f" >&2
            fi
        else
            echo "Copy failed or already exists: $f" >&2
        fi
    done < <(find . -maxdepth 1 -type f -iname "*.$format" -print0)
done
Filename: None. Size: 2kb. View raw, , hex, or download this file.

This paste expires on 2025-09-16 06:28:55.101671. Pasted through web.