Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
#
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
# set -o errexit -o noglob are assumed.
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
#
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
exp_rtl_fileop_check() {
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	local _prefix="${1}" _pname _rname; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	while [ ${#} -gt 0 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		return 0;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	shift; done;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
};
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
ex_rtl_fileop() {
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	local _op="${1}" _src _dst; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	case "${_op}" in
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	cd)	if [ \( -z "${1}" \) -o ! \( -L "${1}" -o -e "${1}" \) ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			ex_rtl_log_msg failexit "Invalid or non-existent directory \`${1}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		else
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			ex_rtl_log_msg vvvo "Changing working directory to \`${1}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			exp_rtl_fileop_check "${PREFIX}" "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			cd -- "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		fi; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	cp)	if [ ${#} -lt 2 ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			ex_rtl_log_msg failexit "Missing parameters (in: cp ${*}.)";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		else
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			_src="${*}"; _src="${_src% *}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			_dst="${*}"; _dst="${_dst##* }";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			ex_rtl_log_msg vvvo "Copying \`${_src}' into \`${_dst}' w/ -pPR.";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			exp_rtl_fileop_check "${PREFIX}" "${*}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			cp -pPR -- "${@}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		fi; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	ln_symbolic)
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		if [ \( -z "${1}" \) -o \( -z "${2}" \) ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			ex_rtl_log_msg failexit "Missing parameters (in: ln_symbolic ${*}.)";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		else
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			exp_rtl_fileop_check "${PREFIX}" "${2}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			if ex_rtl_fileop test "${2}"; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				ex_rtl_fileop rm "${2}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			fi;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			ex_rtl_log_msg vvvo "Linking \`${1}' to \`${2}' w/ -fs";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			ln -fs -- "${1}" "${2}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		fi; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	mv)	if [ \( -z "${1}" \) -o \( -z "${2}" \) ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			ex_rtl_log_msg failexit "Missing parameters (in: mv ${*}.)";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		else
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			ex_rtl_log_msg vvvo "Moving \`${1}' to \`${2}' w/ -fs";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			exp_rtl_fileop_check "${PREFIX}" "${1}" "${2}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			mv -f -- "${1}" "${2}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		fi; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	mkdir|mkfifo|rm|source_opt|test|touch)
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
		while [ ${#} -gt 0 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
			if [ -z "${1}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				ex_rtl_log_msg failexit "Missing parameters (in: ${_op} ${*}.)";
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
			elif [ "${_op}" = mkdir ]\
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			&& [ ! -d "${1}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				exp_rtl_fileop_check "${PREFIX}" "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				if ex_rtl_fileop test "${1}"; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
					ex_rtl_fileop rm "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				fi;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				ex_rtl_log_msg vvvo "Making directory \`${1}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
				mkdir -p -- "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			elif [ "${_op}" = mkfifo ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				exp_rtl_fileop_check "${PREFIX}" "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				if ex_rtl_fileop test "${1}"; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
					ex_rtl_fileop rm "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				fi;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				ex_rtl_log_msg vvvo "Creating FIFO \`${1}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				exp_rtl_fileop_check "${PREFIX}" "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				mkfifo -- "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
			elif [ "${_op}" = rm ]\
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			&& ex_rtl_fileop test "${1}"; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				ex_rtl_log_msg vvvo "Removing directory or file \`${1}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				exp_rtl_fileop_check "${PREFIX}" "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
				rm -rf -- "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			elif [ "${_op}" = source_opt ]\
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			&& ex_rtl_fileop test "${1}"; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				ex_rtl_log_msg vvvo "Sourcing file \`${1}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				exp_rtl_fileop_check "${PREFIX}" "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				. "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			elif [ "${_op}" = test ]\
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			&& ! [ \( -L "${1}" \) -o \( -e "${1}" \) ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				return 1;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			elif [ "${_op}" = touch ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				ex_rtl_log_msg vvvo "Touching file \`${1}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				exp_rtl_fileop_check "${PREFIX}" "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
				touch -- "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
			fi; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		done; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	*)	ex_rtl_log_msg failexit "Error: ex_rtl_fileop() called w/ invalid parameter(s): ${*}"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	esac; return 0;
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
};
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
Lucio Andrés Illanes Albornoz (arab, vxp) 32ad21
# vim:filetype=sh