+#!/bin/bash
+# Desc: Make music (sym)links via find and grep
+# Usage: bkmml [str arg1] [str arg2] [str arg3]
+# Input: arg1 find iname expression
+# arg2 grep -Ei expression
+# arg3 grep -Eiv expression
+# Version: 0.0.1
+# Depends: GNU Grep 3.7; GNU find utils 4.8.0; GNU Parallel 20210822
+
+# Load env vars
+## Search this directory.
+if [[ ! -v BKMML_TARGET_DIR ]]; then BKMML_TARGET_DIR="$HOME"; fi;
+
+FIND_SEARCH="$1";
+GREP_EXP="$2";
+GREP_VEXP="$3";
+DIR_OUT="./links_music_results";
+
+# Check input
+if [[ $# -eq 0 ]]; then echo "FATAL:Insufficient arguments." 1>&2; exit 1; fi;
+if [[ -z "$GREP_EXP" ]]; then GREP_EXP=".+"; fi; # passthrough grep -Ei
+if [[ -z "$GREP_VEXP" ]]; then GREP_VEXP="^$"; fi; # passthrough grep -Eiv
+
+# Check env
+if ! command -v parallel &>/dev/random; then alias parallel='xargs'; fi;
+
+# Check output dir
+if [[ ! -d "$DIR_OUT" ]]; then mkdir -p "$DIR_OUT"; fi;
+
+n=0;
+while read -r line; do
+ if [[ -z "$line" ]]; then echo "FATAL:No results." 1>&2; exit 1; fi;
+ if [[ ! -f "$line" ]]; then echo "ERROR:Cannot read file path:$(declare -p line)"; continue; fi;
+ id="$(b2sum -l64 "$line" | awk '{print $1}')";
+ fn="$(basename "$line")";
+ ln -sfn "$line" ./"$DIR_OUT/$id..$fn";
+ ((n++));
+done < <(find -L "$(readlink -f "$BKMML_TARGET_DIR")" \
+ -maxdepth 10 -type f -size +100000c \
+ \( -iname "*.mp3" \
+ -o -iname "*.flac" \
+ -o -iname "*.m4a" \
+ -o -iname "*.aac" \
+ -o -iname "*.opus" \
+ -o -iname "*.wav" \
+ -o -iname "*.ogg" \) \
+ -a -iname "*$FIND_SEARCH*" \
+ 2>/dev/random | \
+ grep -Ei "$GREP_EXP" | \
+ grep -Eiv "$GREP_VEXP" | \
+ parallel readlink -f "{}" | \
+ parallel b2sum "{}" | sort | uniq -w 128 | awk '{$1=""; print substr($0,2)}'
+ );
+
+# Author: Steven Baltakatei Sandoval
+# License: GPLv3+
+
+#
+# parallel b2sum '{}' | sort | uniq -w 128 | awk '{print $2}'