diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/dir.sh | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/dir.sh b/lib/dir.sh new file mode 100644 index 0000000..32c92fd --- /dev/null +++ b/lib/dir.sh @@ -0,0 +1,69 @@ +# pro-archman +# lib/dir.sh +# Miscellaneous directory-related functions +# +# Copyright (C) 2013 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +hash_name() +{ + local name="${1}" + local hash= + + if [ "x${name}" != "x${name#lib?}" ]; then + hash="$(printf '%s\n' "${name}" | sed 's/^\(lib.\).*$/\1/')" + else + hash="$(printf '%s\n' "${name}" | sed 's/^\(.\).*$/\1/')" + fi + printf '%s\n' "${hash}" + + return 0 +} + +dir_is_empty() +{ + local dir="${1}" + local ret= + local dirent= + + ret=0 + + # Patterns to match all dirents except "." and "..": + # * dirents whose names don't start with "." + # .[!.] dirents whose names start with ".", are two characters long, + # and aren't ".." + # .??* dirents whose names start with "." and are three or more + # characters long + for dirent in "${dir}/"* "${dir}/".[!.] "${dir}/".[!.] "${dir}/".??*; do + if [ -e "${dirent}" ]; then + ret=1 + break + fi + done + + return ${ret} +} + +try_rmdir() +{ + local dir="${1}" + + if dir_is_empty "${dir}"; then + rmdir "${dir}" + return ${?} + else + return 1 + fi +} |