#!/bin/bash # sanitize broken (i.e. that would decompress files in .) tar archives # author Filippo Giunchedi # released under public domain i=$# while [ $i -ge 0 ]; do arg=${BASH_ARGV[$i]} if [ $(echo "$arg" | grep -E "\.t(ar|gz|bz)") ]; then fname="$arg" fi let i-- done IFS=$'\n' for line in $(tar tf "$fname" ); do outdir=$( echo "${line/#.\//}" | cut -d/ -f1 ) if [ -z "$_outdir" ]; then _outdir=$outdir; fi if [ "$outdir" != "$_outdir" ]; then broken=yes break fi done echo "broken? $broken" exit 1 if [ $broken ]; then fname=$( basename "$fname" | cut -d. -f1 ) mkdir $fname tar $@ -C $fname else tar $@ fi