From 78b6ced011faf93a7147330767949b849d2ad465 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Tue, 28 Feb 2017 19:04:35 -0500 Subject: [PATCH] shell/mpd/bin/cleanup-music.sh: ask for confirmation --- shell/mpd/bin/cleanup-music.sh | 37 +++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/shell/mpd/bin/cleanup-music.sh b/shell/mpd/bin/cleanup-music.sh index 48957c9b..3cdd9721 100755 --- a/shell/mpd/bin/cleanup-music.sh +++ b/shell/mpd/bin/cleanup-music.sh @@ -4,27 +4,50 @@ # it leaves behind. set -e +shopt -s nullglob -playlistdir="$(grep playlist_directory $HOME/.config/mpd/mpd.conf | awk '{ print $2; }')" +playlistdir=$(grep playlist_directory "$HOME/.config/mpd/mpd.conf" | awk '{ print $2; }') playlistdir="${playlistdir//\"/}" -playlistfile="$playlistdir/1-star.m3u" -songs=$(<"$playlistfile") +playlistfile="${playlistdir/#\~/$HOME}/1-star.m3u" +songs=$(cat "$playlistfile") # Delete designated songs IFS=" " -for song in ${songs[@]}; do +declare -a to_delete=() +for song in "${songs[@]}"; do fpath="$HOME/music/$song" if [[ -f $fpath ]]; then - echo "Deleting: $song" - rm -f "$fpath" + to_delete+=("$fpath") + # echo "Deleting: $song" + # rm -f "$fpath" fi done + +if (( ${#to_delete[@]} == 0 )); then + echo "Nothing to delete" + exit +fi + +printf "Deleting %s songs:\n\n%s\n\nConfirm? (y/n) " \ + "${#to_delete[@]}" \ + "$(IFS=$'\n'; printf "%s" "${to_delete[*]}")" +read -r confirm +case $confirm in + y|Y) + echo "Deleting..." + for file in ${to_delete[@]}; do + rm -fv "$file" + done + ;; + n|N) echo "Aborted"; exit ;; + *) echo "Invalid" ;; +esac :>"$playlistfile" # Remove duplicates in playlists for playlist in "$playlistdir"/*.m3u; do - awk '!seen[$0]++' "$playlist" > "${playlist}.tmp" + awk '!seen[$0]++' "${playlist}" > "${playlist}.tmp" if [[ -f "${playlist}.tmp" ]]; then rm -f "$playlist" mv "${playlist}.tmp" "$playlist"