Created
September 26, 2016 02:07
-
-
Save ferrouswheel/1cb417f73c7583694ecf7ade438da5d7 to your computer and use it in GitHub Desktop.
Get size of executable and all dependencies
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
resolve_path() { | |
# From https://github.com/keen99/shell-functions/tree/master/resolve_path | |
#I'm bash only, please! | |
# usage: resolve_path <a file or directory> | |
# follows symlinks and relative paths, returns a full real path | |
# | |
local owd="$PWD" | |
#echo "$FUNCNAME for $1" >&2 | |
local opath="$1" | |
local npath="" | |
local obase=$(basename "$opath") | |
local odir=$(dirname "$opath") | |
if [[ -L "$opath" ]] | |
then | |
#it's a link. | |
#file or directory, we want to cd into it's dir | |
cd $odir | |
#then extract where the link points. | |
npath=$(readlink "$obase") | |
#have to -L BEFORE we -f, because -f includes -L :( | |
if [[ -L $npath ]] | |
then | |
#the link points to another symlink, so go follow that. | |
resolve_path "$npath" | |
#and finish out early, we're done. | |
return $? | |
#done | |
elif [[ -f $npath ]] | |
#the link points to a file. | |
then | |
#get the dir for the new file | |
nbase=$(basename $npath) | |
npath=$(dirname $npath) | |
cd "$npath" | |
ndir=$(pwd -P) | |
retval=0 | |
#done | |
elif [[ -d $npath ]] | |
then | |
#the link points to a directory. | |
cd "$npath" | |
ndir=$(pwd -P) | |
retval=0 | |
#done | |
else | |
echo "$FUNCNAME: ERROR: unknown condition inside link!!" >&2 | |
echo "opath [[ $opath ]]" >&2 | |
echo "npath [[ $npath ]]" >&2 | |
return 1 | |
fi | |
else | |
if ! [[ -e "$opath" ]] | |
then | |
echo "$FUNCNAME: $opath: No such file or directory" >&2 | |
return 1 | |
#and break early | |
elif [[ -d "$opath" ]] | |
then | |
cd "$opath" | |
ndir=$(pwd -P) | |
retval=0 | |
#done | |
elif [[ -f "$opath" ]] | |
then | |
cd $odir | |
ndir=$(pwd -P) | |
nbase=$(basename "$opath") | |
retval=0 | |
#done | |
else | |
echo "$FUNCNAME: ERROR: unknown condition outside link!!" >&2 | |
echo "opath [[ $opath ]]" >&2 | |
return 1 | |
fi | |
fi | |
#now assemble our output | |
echo -n "$ndir" | |
if [[ "x${nbase:=}" != "x" ]] | |
then | |
echo "/$nbase" | |
else | |
echo | |
fi | |
#now return to where we were | |
cd "$owd" | |
return $retval | |
} | |
EXE=$1 | |
LIBLIST="$(ldd $EXE | awk '{print $3}' | sed '/^$/d' | tail -n +2 | tr '\n' ' ')" | |
RAWLIBS="" | |
for l in $LIBLIST; do | |
RAWLIBS="$RAWLIBS `resolve_path $l`" | |
done | |
du -ch $RAWLIBS |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment