#!/bin/bash # Check if both SOURCE_DIR and DEST_DIR are provided as arguments if [ "$#" -lt 2 ]; then echo "Usage: $0 [clean=True/False]" exit 1 fi # Capture SOURCE_DIR and DEST_DIR from arguments SOURCE_DIR="$1" DEST_DIR="$2" CLEAN_FLAG="${3:-False}" # Default value is False if not provided IMAGE_DIR="$DEST_DIR/images" # Ensure destination directories exist mkdir -p "$DEST_DIR" # Function to clean DEST_DIR clean_destination() { echo "Cleaning $DEST_DIR" rm -rf "$DEST_DIR"/* } # Check if CLEAN_FLAG is set to True if [ "$CLEAN_FLAG" == "True" ]; then clean_destination fi mkdir -p "$IMAGE_DIR" # Temporary log for copied files LOG_FILE=/tmp/copied_files.log # Clear the log file > "$LOG_FILE" # Find Markdown files with "publish: true" and process them find -L "$SOURCE_DIR" -type f -name "*.md" -exec grep -q "publish: true" {} \; -exec grep -l "publish: true" {} + | while read -r markdown_file; do # Extract relative path from the source directory relative_path="${markdown_file#$SOURCE_DIR/}" # Destination path dest_path="$DEST_DIR/$relative_path" # Ensure the directory exists before copying the Markdown file dest_dir=$(dirname "$dest_path") mkdir -p "$dest_dir" # Check if the destination file already exists if [ -f "$dest_path" ]; then # Compare the source and destination files if cmp -s "$markdown_file" "$dest_path"; then echo "Skipped $markdown_file as it already exists and has the same content in $dest_path" >> "$LOG_FILE" else # Replace the destination file with the source file cp -p "$markdown_file" "$dest_path" echo "Replaced $dest_path with $markdown_file" >> "$LOG_FILE" # Extract and copy referenced images grep -o '\!\[\[.*\]\]' "$markdown_file" | sed 's/\!\[\[\(.*\)\]\]/\1/' | while IFS= read -r image_ref; do # Check if image_ref is a relative path if [[ ! "$image_ref" =~ ^/ ]]; then image_ref="$SOURCE_DIR/$image_ref" fi # Try to find the image recursively within SOURCE_DIR image_path=$(find -L "$SOURCE_DIR" -type f -name "$(basename "$image_ref")" -print -quit) # Debugging: Print image_path echo "Checking image_path: $image_path" >> "$LOG_FILE" if [ -f "$image_path" ]; then # Check if the image already exists in IMAGE_DIR if [ ! -f "$IMAGE_DIR/$(basename "$image_ref")" ]; then cp "$image_path" "$IMAGE_DIR/" echo "Copied image $image_ref to $IMAGE_DIR/" >> "$LOG_FILE" else echo "Skipped copying image $image_ref as it already exists in $IMAGE_DIR/" >> "$LOG_FILE" fi else echo "Image reference $image_ref in $markdown_file does not exist." >> "$LOG_FILE" fi done fi else # Copy the Markdown file since it doesn't exist in the destination cp -p "$markdown_file" "$dest_path" echo "Copied $markdown_file to $dest_path" >> "$LOG_FILE" # Extract and copy referenced images grep -o '\!\[\[.*\]\]' "$markdown_file" | sed 's/\!\[\[\(.*\)\]\]/\1/' | while IFS= read -r image_ref; do # Check if image_ref is a relative path if [[ ! "$image_ref" =~ ^/ ]]; then image_ref="$SOURCE_DIR/$image_ref" fi # Try to find the image recursively within SOURCE_DIR image_path=$(find -L "$SOURCE_DIR" -type f -name "$(basename "$image_ref")" -print -quit) # Debugging: Print image_path echo "Checking image_path: $image_path" >> "$LOG_FILE" if [ -f "$image_path" ]; then # Check if the image already exists in IMAGE_DIR if [ ! -f "$IMAGE_DIR/$(basename "$image_ref")" ]; then cp "$image_path" "$IMAGE_DIR/" echo "Copied image $image_ref to $IMAGE_DIR/" >> "$LOG_FILE" else echo "Skipped copying image $image_ref as it already exists in $IMAGE_DIR/" >> "$LOG_FILE" fi else echo "Image reference $image_ref in $markdown_file does not exist." >> "$LOG_FILE" fi done fi done # Find Markdown files with "publish: false" and process them find -L "$SOURCE_DIR" -type f -name "*.md" -exec grep -q "publish: false" {} \; -exec grep -l "publish: false" {} + | while read -r markdown_file; do # Extract relative path from the source directory relative_path="${markdown_file#$SOURCE_DIR/}" # Destination path dest_path="$DEST_DIR/$relative_path" # Check if the destination file exists if [ -f "$dest_path" ]; then # Remove the file from DEST_DIR rm "$dest_path" echo "Removed $markdown_file from $DEST_DIR" >> "$LOG_FILE" else echo "File $markdown_file not found in $DEST_DIR" >> "$LOG_FILE" fi done # Print the log file cat "$LOG_FILE" # Debugging: Indicate completion echo "Script execution completed."