echo "Stopping impermanence mount with source: ${source}, target: ${target}, path: ${path}." source_current="${source}" target_current="${target}" IFS='/' read -ra path_parts <<< "${path}" unset "path_parts[-1]" for part in "${path_parts[@]}"; do source_current="${source_current}/${part}" target_current="${target_current}/${part}" if [[ ! -d "${target_current}" ]]; then break fi if [[ -d "${source_current}" ]]; then continue fi read -r mode owner group <<< "$(stat -c '%a %u %g' "${target_current}")" install -d -m "${mode}" -o "${owner}" -g "${group}" "${source_current}" done source=$(realpath -m "${source}/${path}") target=$(realpath -m "${target}/${path}") if [[ ! -e "${target}" ]] || { [[ -d "${target}" ]] && [[ -z "$(ls -A "${target}")" ]]; } || { [[ -f "${target}" ]] && [[ ! -s "${target}" ]]; }; then exit 0 fi if [[ -e "${source}" ]]; then >&2 echo "Error: Source ${source} already exists. Cannot move ${target} to ${source}." exit 1 fi echo "Moving target ${target} to source ${source}." mv "${target}" "${source}"