From 40fcffffbb93f38bfb018a4dff155a03c5f25886 Mon Sep 17 00:00:00 2001 From: Steven Baltakatei Sandoval Date: Wed, 19 Jan 2022 05:18:05 +0000 Subject: [PATCH] feat(us/bk-copy-rand-music.sh):Add misc features - min_file_duration: permits excluding very short audio files - max_filename_length: permits reducing output file name length for filesystem compatibility (e.g. Windows likes names shorter than 255 characters). - showUsage(): Update description to indicate that the script copies based on whether an audio track is detectable or not. --- user/bk-copy-rand-music.sh | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/user/bk-copy-rand-music.sh b/user/bk-copy-rand-music.sh index c326e41..c4e5685 100755 --- a/user/bk-copy-rand-music.sh +++ b/user/bk-copy-rand-music.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Desc: Copies random music +# Desc: Copies random audio files # Usage: bk-copy-rand-music.sh [dir SOURCE] [dir DEST] [int DURATION] +# Version: 0.0.2 declare -Ag appRollCall # Associative array for storing app status declare -Ag fileRollCall # Associative array for storing file status @@ -9,7 +10,9 @@ declare -a music_codecs # Array for storing valid codec names (e.g. "aac" "mp3") # Adjustable parameters music_codecs=("vorbis" "aac" "mp3" "flac" "opus"); # whitelist of valid codec_names ffprobe might return -max_loops=1000000; # max number of files to test whether are audio or not +max_loops="1000000"; # max number of files to test whether are audio or not +max_filename_length="255"; # max output filename length +min_file_duration="10"; # minimum duration per music file yell() { echo "$0: $*" >&2; } # print script path and all args to stderr die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status @@ -178,8 +181,8 @@ showUsage() { cat <<'EOF' DESCRIPTION: - This script may be used to copy a random selection of files from - SOURCE to DEST. + This script may be used to copy a random selection of files containing + audio tracks from SOURCE to DEST. USAGE: bk-copy-rand-music [dir SOURCE] [dir DEST] [int DURATION] @@ -431,6 +434,7 @@ main() { dur_cand="$(get_media_length "$path_candfile")"; dur_cand="${dur_cand%%.*}"; # convert float to int if ! checkInt "$dur_cand"; then continue; fi; # reject + if [[ "$dur_cand" -lt "$min_file_duration" ]]; then continue; fi; # reject ### Add/update candfile to list_copy assoc. array (key=path; value=duration) #yell "DEBUG:Adding $path_candfile"; @@ -457,8 +461,12 @@ main() { ## Get 16-character b2sum fingerprint (for different files that share basename) fingerprint="$(b2sum -l64 "$key" | cut -d' ' -f1)"; + ## Form output filename + file_name="$fingerprint".."$file_basename"; + file_name="${file_name:0:$max_filename_length}"; # Limit filename length (e.g. Windows has max of 255 characters) + ## Form output path - path_output="$dir_dest"/"$fingerprint".."$file_basename"; + path_output="$dir_dest"/"$file_name"; ## Copy try cp "$key" "$path_output" && yell "NOTICE:Copied ($value seconds): $key "; -- 2.30.2