#!/bin/bash libs="$(mktemp)" dbg() { [ -z "$DEBUG" ] || echo "$*" >&2 } # prints all libraries directly depending on a binary / library find_libs() { local file="$1" # regular libs ldd "$file" | awk -F'> | \\(' '{if($2 ~ "^/")print $2}' | sort -u } # returns 1 if a library was known before, 0 otherwise add_lib() { local lib="$1" if ! grep -q -x -F "$lib" "$libs"; then dbg "Adding $lib" echo "$lib" >> "$libs" return 0 fi return 1 } recurse_find_libs() { local file="$1" dbg "Checking $file" while read lib; do if add_lib "$lib"; then recurse_find_libs "$lib" fi done < <(find_libs "$file") dbg "Done with $file" } for bin; do # ld-linux.so while read lib; do add_lib "$lib" || true done < <(ldd "$bin" | awk '/^[ \t]*\//{print $1}') recurse_find_libs "$bin" done wc -l "$libs"