_TAGS="$@"
_PATHS_WRITTEN=
for _TAG in ${_TAGS}; do
-
_PATH_TAG="../copy/${_TAG}"
if [ ! -d "${_PATH_TAG}" ]; then
continue
fi
cd "${_PATH_TAG}"
- for _PATH_REL in $(find . -type f,l); do
- _PATH_TARGET="/$(echo ${_PATH_REL} | cut -c 2-)"
- _DIRECTORY=$(dirname "${_PATH_TARGET}")
+ for _PATH_REL in $(find -L . -type f); do
+ _PATH_TARGET="$(echo ${_PATH_REL} | cut -c 2-)"
+ _PATH_TARGET_DIR=$(dirname "${_PATH_TARGET}")
# ensure directory by mkdir -p; to avoid later chowning pre-existing directories,
# collect only what's returned by the command as actually newly created
- _CREATION_SUMMARY=$(mkdir -pv "${_DIRECTORY}")
+ _CREATION_SUMMARY=$(mkdir -pv "${_PATH_TARGET_DIR}")
_CREATED_PATHS=$(echo "${_CREATION_SUMMARY}" | sed -E "s/'\$//g" | sed -E "s/^mkdir: created directory '//g")
- _PATHS_WRITTEN="${_CREATED_PATHS}${_PATHS_WRITTEN}"
+ _PATHS_WRITTEN="${_CREATED_PATHS}\n${_PATHS_WRITTEN}"
# handle dirtree creation instruction files
_FILENAME="$(basename ${_PATH_REL})"
if [ -z "${_LINK_NAME}" ]; then
_LINK_NAME=$(basename "${_LINK_TARGET}")
fi
- _PATH_LINK="${_DIRECTORY}/${_LINK_NAME}"
- ln -s "${_LINK_TARGET}" "${_PATH_LINK}"
+ _PATH_LINK="${_PATH_TARGET_DIR}/${_LINK_NAME}"
+ ln -sf "${_LINK_TARGET}" "${_PATH_LINK}"
_PATHS_WRITTEN="${_PATH_LINK}\n${_PATHS_WRITTEN}"
continue
fi
-
+
# actual file copying
- _PATH_SOURCE=$(realpath "${_PATH_REL}")
- _CREATION_SUMMARY=$(cp -av "${_PATH_SOURCE}" "${_PATH_TARGET}")
- _CREATED_PATHS=$(echo "${_CREATION_SUMMARY}" | sed -E "s/'\$//g" | sed "s/.*' -> '//g")
- _PATHS_WRITTEN="${_CREATED_PATHS}${_PATHS_WRITTEN}"
+ _CREATION_SUMMARY=$(cp -avL "${_PATH_REL}" "${_PATH_TARGET_DIR}")
+ _CREATED_PATHS=$(echo "${_CREATION_SUMMARY}" | grep -v -E '^removed ' | sed -E "s/'\$//g" | sed "s/.*' -> '//g")
+ _PATHS_WRITTEN="${_CREATED_PATHS}\n${_PATHS_WRITTEN}"
done
cd - > /dev/null
done
+ _PATHS_WRITTEN=$(echo "${_PATHS_WRITTEN}" | grep -v -E '^ *$')
- # for all paths written into user home directories, chown to respective users
+ ## for all paths written into user home directories, chown to respective users
for _PATH in ${_PATHS_WRITTEN}; do
if [ $(echo "${_PATH}" | grep -E '^/home/' | wc -l) -gt 0 ]; then
- _USERNAME=$(echo "${_PATH}" | sed -E '/^\/home\///' | sed -E '/\/.*//i')
+ _USERNAME=$(echo "${_PATH}" | sed -E 's/^\/home\///' | sed -E 's/\/.*//')
chown -R "${_USERNAME}:${_USERNAME}" "${_PATH}"
fi
done