#!/bin/bash # Script to remove a Samba share, archive its data, and clean up configs # Usage: ./remove_samba_share.sh set -euo pipefail if [ "$#" -ne 1 ]; then echo "Usage: $0 " exit 1 fi SHARE_NAME="$1" SHARE_CONFIG_DIR="/etc/samba/shares.d" SMBCONF="/etc/samba/smb.conf" SHARE_CONFIG_FILE="$SHARE_CONFIG_DIR/$SHARE_NAME.conf" TRASH_BASE="$SMB_DATA_FOLDER/trash" # 1. Read the .conf file if it exists if [ ! -f "$SHARE_CONFIG_FILE" ]; then echo "Error: Share config file does not exist: $SHARE_CONFIG_FILE" exit 1 fi echo "Found share config: $SHARE_CONFIG_FILE" # Extract path and username SHARE_PATH=$(grep -i '^[[:space:]]*path[[:space:]]*=' "$SHARE_CONFIG_FILE" | cut -d'=' -f2- | xargs) VALID_USER=$(grep -i '^[[:space:]]*valid users[[:space:]]*=' "$SHARE_CONFIG_FILE" | cut -d'=' -f2- | xargs) # Validate extracted data if [ -z "$SHARE_PATH" ] || [ -z "$VALID_USER" ]; then echo "Error: Could not extract share path or user from config." exit 1 fi # Move share folder if it exists if [ -d "$SHARE_PATH" ]; then USER_TRASH_DIR="$TRASH_BASE/$VALID_USER" DEST="$USER_TRASH_DIR/$(basename "$SHARE_PATH")" echo "Moving share folder '$SHARE_PATH' to '$DEST'" mkdir -p "$USER_TRASH_DIR" mv "$SHARE_PATH" "$DEST" else echo "Note: Share path '$SHARE_PATH' does not exist or is not a directory — skipping move." fi # Remove the config file echo "Removing share config file: $SHARE_CONFIG_FILE" rm -f "$SHARE_CONFIG_FILE" # Remove include line and related comment from smb.conf INCLUDE_LINE="include = $SHARE_CONFIG_FILE" sed -i "/# Include share definition for $SHARE_NAME/d" "$SMBCONF" sed -i "\|$INCLUDE_LINE|d" "$SMBCONF" # Restart Samba echo "Restarting Samba service..." if systemctl restart smbd; then echo "Samba restarted successfully." else echo "Error restarting Samba. Please check logs." exit 2 fi