#!/bin/bash # $1: path to fs_get_stats program # $2: start dir # $3: subdir to tar up (from $2) # $4: target tar name # $5: target tarball name (usually $(3).bz2) # $6: TARGET_OUT path to query device specific FS configs if [ $# -ne 6 ]; then echo "Error: wrong number of arguments in cmd: $0 $* " exit 1 fi fs_get_stats=`readlink -f $1` start_dir=`readlink -f $2` dir_to_tar=$3 target_tar=`readlink -f $4` target_tarball=`readlink -f $5` target_out=`readlink -f $6` cd $2 #tar --no-recursion -cvf ${target_tar} ${dir_to_tar} rm ${target_tar} > /dev/null 2>&1 # do dirs first subdirs=`find ${dir_to_tar} -type d -print` files=`find ${dir_to_tar} \! -type d -print` for f in ${subdirs} ${files} ; do curr_perms=`stat -c 0%a $f` [ -d "$f" ] && is_dir=1 || is_dir=0 new_info=`${fs_get_stats} ${curr_perms} ${is_dir} ${f} ${target_out}` new_uid=`echo ${new_info} | awk '{print $1;}'` new_gid=`echo ${new_info} | awk '{print $2;}'` new_perms=`echo ${new_info} | awk '{print $3;}'` # echo "$f: dir: $is_dir curr: $curr_perms uid: $new_uid gid: $new_gid "\ # "perms: $new_perms" tar --no-recursion --numeric-owner --owner $new_uid \ --group $new_gid --mode $new_perms -p -rf ${target_tar} ${f} done if [ $? -eq 0 ] ; then case "${target_tarball}" in *.bz2 ) bzip2 -c ${target_tar} > ${target_tarball} ;; *.gz ) gzip -c ${target_tar} > ${target_tarball} ;; esac success=$? [ $success -eq 0 ] || rm -f ${target_tarball} rm -f ${target_tar} exit $success fi rm -f ${target_tar} exit 1