home · contact · privacy
Fix.
authorChristian Heller <c.heller@plomlompom.de>
Fri, 18 Apr 2025 06:20:42 +0000 (06:20 +0000)
committerChristian Heller <c.heller@plomlompom.de>
Fri, 18 Apr 2025 06:20:42 +0000 (06:20 +0000)
bookworm/scripts/lib/copy_dirtrees_of_tags

index 11fa0f1664a289cc7a9a8b28ece00bbbed00fa46..36c8a3fc816249bf49c25e8f4a65d878a7aca05c 100644 (file)
@@ -2,21 +2,20 @@ copy_dirtrees_of_tags() {
     _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})"
@@ -29,25 +28,25 @@ copy_dirtrees_of_tags() {
                 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