X-Git-Url: https://zdv2.bktei.com/gitweb/BK-2020-03.git/blobdiff_plain/a9a36cc48e1b18d63c1b1f240c9347191ec8d67f..9eaab35fa56888b516049a8c3458fea9632b4647:/user/bk-copy-rand-music.sh diff --git a/user/bk-copy-rand-music.sh b/user/bk-copy-rand-music.sh old mode 100644 new mode 100755 index c326e41..ea384fe --- 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.3 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"; @@ -448,6 +452,7 @@ main() { if [[ $n -gt $max_loops ]]; then die "ERROR:Too many loops:$n"; fi; done; + n=0; # Initialize loop counter # Copy files in list_copy to dir_dest; for key in "${!list_copy[@]}"; do value="${list_copy[$key]}"; @@ -457,13 +462,26 @@ 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 "; #yell "DEBUG:Copied $file_basename to $dur_dest."; + ## Append log + path_log_output="$dir_dest"/COPY.log; + if [[ $n -le 0 ]]; then + echo "fingerprint","duration","original_path" >> "$path_log_output"; + else + echo "$fingerprint","$value","$key" >> "$path_log_output"; + fi; + + ((n++)); unset file_basename path_output done;