diff options
Diffstat (limited to 'subr/ex_rtl_fileop.subr')
-rw-r--r-- | subr/ex_rtl_fileop.subr | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/subr/ex_rtl_fileop.subr b/subr/ex_rtl_fileop.subr new file mode 100644 index 00000000..3732ab5e --- /dev/null +++ b/subr/ex_rtl_fileop.subr @@ -0,0 +1,39 @@ +# +# set -o errexit -o noglob are assumed. +# + +ex_build_fileop() { + local _op="${1}"; shift; + if [ "${_op}" = cd ]; then + ex_log_msg varn "Changing working directory to \`${1}'."; + [ \( -n "${1}" \) -a \( -L "${1}" -o -e "${1}" \) ] && cd -- "${1}"; + elif [ "${_op}" = cp ]; then + ex_log_msg varn "Copying \`${1}' to \`${2}' w/ -pPR."; + [ ${#} -ge 2 ] && cp -pPR -- "${@}"; + elif [ "${_op}" = ln_symbolic ]; then + ex_log_msg varn "Linking \`${1}' to \`${2}' w/ -fs"; + [ \( -n "${1}" \) -a \( -n "${2}" \) ] && ln -fs -- "${1}" "${2}"; + elif [ "${_op}" = mv ]; then + ex_log_msg varn "Moving \`${1}' to \`${2}' w/ -fs"; + [ \( -n "${1}" \) -a \( -n "${2}" \) ] && mv -f -- "${1}" "${2}"; + elif [ "${_op}" = mkdir ]\ + || [ "${_op}" = rm ]; then + while [ ${#} -gt 0 ]; do + if [ -z "${1}" ]; then + return 1; + elif [ "${_op}" = mkdir ]\ + && [ ! -e "${1}" ]; then + ex_log_msg varn "Making directory \`${1}'."; + mkdir -p -- "${1}"; + elif [ "${_op}" = rm ]\ + && [ \( -L "${1}" \) -o \( -e "${1}" \) ]; then + ex_log_msg varn "Removing directory or file \`${1}'."; + rm -rf -- "${1}"; + fi; shift; + done; + else + ex_log_msg failexit "Error: ex_build_fileop() called w/ invalid parameter(s) \`${@}'."; + fi; +}; + +# vim:filetype=sh |