#!/bin/bash # Title......: lm # Description: list media # Author.....: Mitchell Johnston - uid 0 # Contact....: mitch@crn.hopto.org # Updated....: Sun 10 Jul 2022 04:38:56 PM CDT #---------------------------------- # variables #---------------------------------- [ "$1" == "-D" ] && DEBUG=1 && shift 1 # -D to turn on debug mode PS4='$SECONDS $LINENO: ' # debug prompt DOW=$(date +%a) # day of week: Thu TODAY=$(date +%m/%d) # month/day: 03/25 DOM=$(date +%d) # day of month: 25 OS=$(uname -s) # OS type: SunOS Linux NAME=${0##*/} # name of the script LOG=~/etc/${HOSTNAME}.log # my log file # Colors - uncomment if needed R=$(tput setaf 1) # red BR=$(tput setaf 1; tput bold) # bold red G=$(tput setaf 2) # green BG=$(tput setaf 2; tput bold) # bold green Y=$(tput setaf 3) # yellow BY=$(tput setaf 3; tput bold) # bold yellow B=$(tput setaf 4) # blue BM=$(tput setaf 5; tput bold) # bold magenta C=$(tput setaf 6) # bold cyan BC=$(tput setaf 6; tput bold) # bold cyan BL=$(tput setaf 7; tput bold) # bold light grey BLD=$(tput bold) # bold N=$(tput sgr0) # normal SIT=$(tput sitm) # italics RIT=$(tput ritm) # remove italics UL=$(tput smul) # turn underline on NL=$(tput rmul) # turn underline off RV=$(tput rev) # turn on reverse mode ROWS=$(tput lines) COLS=$(tput cols) # functions #---------------------------------- bl(){ ## write a blank line # Use: bl [ "$DEBUG" == "1" ] && set -x echo "" } html(){ ## mark up code vim -f +"syn on" +"set nonu" +"set foldenable!" +"set nospell" +"run! syntax/2html.vim" +"wq" +"q" $1 } log(){ ## creates a basic log entry $LOG must be defined # Use: log {entry} or log (no option to view) [ "$DEBUG" == "1" ] && set -x if [ "$#" -eq 0 ] # if not adding then display lat 7 entries then echo $BC vd $LOG 2>/dev/null ||tail -7 $LOG # display with VisiData, if installed echo $N else echo -e "$(date '+%D%t%T')\t${NAME}\t$*">>"$LOG" fi } pause(){ ## simple pause routine # Use: pause {optional number of seconds} or "-nt" for no time out [ "$DEBUG" == "1" ] && set -x [ "$1" == "-nt" ] && TMOUT="" && shift echo "$BY"; if [ $# -gt 0 ] then read -t $1 -r -p "${C}Hit any key (${BY}$1${C} second timeout)${N}" -n 1 FOO; else read -r -p "${C}Hit any key${N}" -n 1 FOO; fi; bl } xtitle(){ ## set window title # Use: xtitle "Text to display" printf "\033]0;%s\007" "$*" } # setup #---------------------------------- # this provides a quick way to edit all my scripts on the fly if [ "$1" == "-E" ] then vim $0 sed -i -e "7s/.*/# Updated....: $(date)/" $0 html $0 cp $0 /var/www/unix mv $0.html /var/www/unix cp $0 /var/gopher/scripts exit fi # display help if needed if [ "$1" == "-h" ] || [ "$1" == "--help" ] then fmt -s -w $(tput cols) </dev/null || sudo apt install bash -qyy command -v ffmpeg >/dev/null || sudo apt install ffmpeg -yyq command -v exiftool >/dev/null || sudo apt install libimage-exiftool-perl -yyq # directory check #[[ "$(pwd)" != *"foo"* ]] && echo "$NAME: directory error" && exit 1 # main #--------------------------- [ "$DEBUG" == "1" ] && set -x [ "$#" -eq 1 ] && [ "$1" == "-t" ] && TOTAL=y # one option and its for total [ "$#" -eq 1 ] && [ -d $1 ] && cd $1 # one option and its for directory [ "$#" -eq 2 ] && [ -d $2 ] && cd $2 && TOTAL=y # if 2 args if [ $(ls -A *.mp? *.m4v 2>/dev/null|wc -l) -lt 1 ] then echo "No files!" exit 1 fi { # mp4 files for FILE in $(ls *mov *mp4 *mkv *avi *m4v 2>/dev/null) do [ -z "$FILE" ] && continue ffmpeg -i "$FILE" -hide_banner >/tmp/$$ 2>&1 TITLE=$(grep title /tmp/$$|cut -d: -f2) DURATION=$(grep Duration /tmp/$$|awk '{print $2}'|cut -d: -f1,2) echo "${C}$FILE ${BR}$DURATION${N}" done } |sort -k 2 { # mp3's for FILE in $(ls *mp3 2>/dev/null) do ffmpeg -i "$FILE" -hide_banner >/tmp/$$ 2>&1 TITLE=$(grep title /tmp/$$|cut -d: -f2|cut -d' ' -f2-) DURATION=$(grep Duration /tmp/$$|awk '{print $2}'|cut -d: -f1,2) ARTIST=$(grep artist /tmp/$$|cut -d: -f2|tr -d '\n') echo "${BG}$FILE ${BY}${ARTIST:=No Artist} ${BR}$DURATION${N}" done } [ -f /tmp/$$ ] && rm /tmp/$$ >/dev/null 2>&1 [ "$TOTAL" == "y" ] && echo -n "${BY}Total: ${N}" && exiftool -m -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_) }' ./*.mp? | tail -n1; 2>/dev/null #[ -d $1 ] || [ -d $2 ] && cd - >/dev/null 2>&1