#!/bin/bash lstSupportedArchiveExts="rar,zip,tar,tar.bz2,tar.gz" upck_zip='unzip "%f" -d "%d"' upck_rar='unrar x "%f" "%d"' upck_tar='tar -xf "%f" -C "%d"' upck_tar_bz2='tar -xjf "%f" -C "%d"' upck_tar_gz='tar -xzf "%f" -C "%d"' find ./ -maxdepth 1 -type f | while read fileArchive; do fileArchive="${fileArchive#./}" echo "=======> $fileArchive <=======" | tr 'a-z' 'A-Z' for fileArchive_ext in $(echo "$lstSupportedArchiveExts" | tr ',' ' '); do echo "${fileArchive}" | egrep -q "\.${fileArchive_ext}$" && break done if [ $? -eq 0 ]; then dir2Unpack_fileArchive="${fileArchive%%.$fileArchive_ext}" [ -d "$dir2Unpack_fileArchive" ] || mkdir -p "$dir2Unpack_fileArchive" echo -n "Unpacking $fileArchive... " cmd2exec="upck_${fileArchive_ext//./_/}" cmd2exec="`echo \"${!cmd2exec}\" | sed \"s&%f&${fileArchive}&g; s&%d&${dir2Unpack_fileArchive}&g\"`" { eval "$cmd2exec" && echo 'OK'; } || echo 'FAILURE!' else echo "Sorry, file $fileArchive is not an archive or unpacking of this archive type is unsupported by me" continue fi done