view extract-from-isa @ 0:975585306dc4 draft default tip

"planemo upload commit c2694fb4aa55c4f25eb53db73496eaf5e56d7872"
author prog
date Wed, 08 Jan 2020 07:50:13 -0500
parents
children
line wrap: on
line source

#!/bin/bash
# vi: fdm=marker

# Constants {{{1
################################################################

PROG_NAME=$(basename $0)
PROG_PATH=$(dirname $0)
YES=yes
NO=no

# Global variables {{{1
################################################################

DEBUG=0
EXT=
INPUT_DIR=
OUTPUT_DIR=
SYMLINK=$NO

# Print help {{{1
################################################################

function print_help {
	echo "Usage: $PROG_NAME -i <ISA_DIR> -e <EXT> -o <OUTPUT_DIR>"
	echo
	echo "Extract files with a given extension from ISA-Tab archives into a collection."
	echo
	echo "Options:"
	echo "   -e, --ext             EXT   The extension of the files to find."
	echo "   -h, --help                  Print this help message."
	echo "   -i, --input           DIR   Input directory containing ISA archive."
	echo "   -o, --output          DIR   Set the output directory to use."
	echo "   -s, --symlink               Create symbolic links instead of copying files."
}

# Error {{{1
################################################################

function error {

	local msg=$1

	echo "ERROR: $msg" >&2

	exit 1
}

# Print debug msg {{{1
################################################################

function print_debug_msg {

	local dbglvl=$1
	local dbgmsg=$2

	[ $DEBUG -ge $dbglvl ] && echo "[DEBUG] $dbgmsg" >&2
}

# Read args {{{1
################################################################

function read_args {

	local args="$*" # save arguments for debugging purpose
	
	# Read options
	while true ; do
		shift_count=1
		case $1 in
			-e|--ext)               EXT="$2" ; shift_count=2 ;;
			-g|--debug)             DEBUG=$((DEBUG + 1)) ;;
			-h|--help)              print_help ; exit 0 ;;
			-i|--input)             INPUT_DIR="$2" ; shift_count=2 ;;
			-o|--output)            OUTPUT_DIR="$2" ; shift_count=2 ;;
			-s|--symlink)           SYMLINK=$YES ;;
			-) error "Illegal option $1." ;;
			--) error "Illegal option $1." ;;
			--*) error "Illegal option $1." ;;
			-?) error "Unknown option $1." ;;
			-[^-]*) split_opt=$(echo $1 | sed 's/^-//' | sed 's/\([a-zA-Z]\)/ -\1/g') ; set -- $1$split_opt "${@:2}" ;;
			*) break
		esac
		shift $shift_count
	done
	shift $((OPTIND - 1))

	# Debug
	print_debug_msg 1 "Arguments are : $args"

	# Check input params
	[[ $# -eq 0 ]] || error "No remaining arguments are allowed."
	[[ -n $INPUT_DIR ]] || error "You must specify an input directory, using -i option."
	[[ -d $INPUT_DIR ]] || error "\"$INPUT_DIR\" is not a valid directory."
	[[ -n $OUTPUT_DIR ]] || error "You must specify an output directory, using -o option."
	[[ ! -e $OUTPUT_DIR ]] || error "\"$OUTPUT_DIR\" already exists."
	[[ -n $EXT ]] || error "You must specify the extension of the files you are looking for, with the -e option."
}

# MAIN {{{1
################################################################

read_args "$@"

# Create output directory
print_debug_msg 1 "Create output directory \"$OUTPUT_DIR\"."
mkdir -p "$OUTPUT_DIR"

# Find files to extract
print_debug_msg 1 "Find \"$EXT\" files to extract in \"$INPUT_DIR\"."
files_to_extract=$(mktemp -t tmp.XXXXXX)
find "$(realpath $INPUT_DIR)" -iname "*.$EXT" >files_to_extract
print_debug_msg 1 "Files to extract:"
if [[ $DEBUG -ge 1 ]] ; then
	cat files_to_extract >&2
fi

# Extract files
if [[ $SYMLINK == $YES ]] ; then
	print_debug_msg 1 "Create symbolic links of all \"$EXT\" files to extract into \"$OUTPUT_DIR\"."
	xargs -I % ln -s % "$OUTPUT_DIR" <files_to_extract
else
	print_debug_msg 1 "Copy all \"$EXT\" files to extract to \"$OUTPUT_DIR\"."
	xargs -I % cp % "$OUTPUT_DIR" <files_to_extract
fi
rm files_to_extract
print_debug_msg 1 "Files extracted:"
if [[ $DEBUG -ge 1 ]] ; then
	ls -1 "$OUTPUT_DIR" >&2
fi