diff options
Diffstat (limited to 'linux-firmware/dedup-firmware.sh')
| -rw-r--r-- | linux-firmware/dedup-firmware.sh | 53 |
1 files changed, 9 insertions, 44 deletions
diff --git a/linux-firmware/dedup-firmware.sh b/linux-firmware/dedup-firmware.sh index 51dad3e0..64ce7169 100644 --- a/linux-firmware/dedup-firmware.sh +++ b/linux-firmware/dedup-firmware.sh @@ -11,10 +11,10 @@ err() { verbose=: destdir= - while test $# -gt 0; do case $1 in -v | --verbose) + # shellcheck disable=SC2209 verbose=echo shift ;; @@ -22,6 +22,7 @@ while test $# -gt 0; do if test -n "$destdir"; then err "unknown command-line options: $*" fi + destdir="$1" shift ;; @@ -33,7 +34,7 @@ if test -z "$destdir"; then fi if ! test -d "$destdir"; then - err "provided directory does not exist." + err "provided directory does not exit." fi if ! command -v rdfind >/dev/null; then @@ -43,47 +44,11 @@ fi $verbose "Finding duplicate files" rdfind -makesymlinks true -makeresultsfile true "$destdir" >/dev/null -# --relative is a GNU coreutils ln extension; not available in BusyBox. -# Compute the relative path ourselves using a portable shell function. -relpath() { - # relpath <target_abs> <link_abs> - # Prints the relative path from the directory of <link_abs> to <target_abs>. - target="$1" - link_dir=$(dirname "$2") - - # Strip common prefix component-by-component. - t="$target" - b="$link_dir" - - # Normalise: remove trailing slashes - t=${t%/} - b=${b%/} - - # Walk up from b until it is a prefix of t - up="" - while [ -n "$b" ] && [ "${t#$b/}" = "$t" ] && [ "$t" != "$b" ]; do - b=$(dirname "$b") - up="../$up" - done - - if [ "$t" = "$b" ]; then - # Same directory - rel="." - else - rel="$up${t#$b/}" - fi - - printf '%s\n' "$rel" -} - -grep DUPTYPE_WITHIN_SAME_TREE results.txt \ - | grep -o "$destdir[^ ]*" \ - | while read -r l; do - target=$(realpath "$l") - $verbose "Correcting path for $l" - rel=$(relpath "$target" "$l") - # BusyBox ln uses short flags: -s (symbolic), -f (force) - ln -sf "$rel" "$l" - done +grep DUPTYPE_WITHIN_SAME_TREE results.txt | grep -o "$destdir.*" | while read -r l; do + target="$(realpath "$l")" + target="/lib/firmware/${target#$destdir}" + $verbose "Correcting path for $l" + ln -sf "$target" "$l" +done rm results.txt |