From 3dc0bdeffbb2c135ecf15672f52f5676c511866b Mon Sep 17 00:00:00 2001 From: Steven Baltakatei Sandoval Date: Wed, 21 Feb 2024 00:59:46 +0000 Subject: [PATCH] feat(user/bkmml):Create symlinks from filename searches --- user/bkmml | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100755 user/bkmml diff --git a/user/bkmml b/user/bkmml new file mode 100755 index 0000000..c27ffc4 --- /dev/null +++ b/user/bkmml @@ -0,0 +1,59 @@ +#!/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}' -- 2.30.2