summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2023-06-07 15:51:34 -0700
committerKai Stevenson <kai@kaistevenson.com>2023-06-07 15:51:57 -0700
commit36e1bf9bf77fb1e2bdb78965496169520de0eb57 (patch)
treee78fbfc319f4e964f9e78c5a67a9df53489997a7
parente2e23b236f72980957b098bc696a6bbe2e4b8389 (diff)
better syncmusic script
-rwxr-xr-xsyncmusic-interactive119
1 files changed, 119 insertions, 0 deletions
diff --git a/syncmusic-interactive b/syncmusic-interactive
new file mode 100755
index 0000000..8aa353b
--- /dev/null
+++ b/syncmusic-interactive
@@ -0,0 +1,119 @@
+#!/bin/bash
+REMOTE=root@canonical.aberrantflux.xyz
+REMOTEDIR=/srv/music
+LOCALDIR=$(pwd)
+WHITE="\e[37m"
+GREEN="\e[32m"
+BLUE="\e[35m"
+rm /tmp/remotemusiclist
+rm /tmp/localmusiclist
+rm /tmp/localonlymusicd
+rm /tmp/syncmusictorun
+echo "Remote directory is at $REMOTE:$REMOTEDIR"
+echo "Local dir is at $LOCALDIR"
+LOCALDISCOVERED=()
+LOCALCOUNT=0
+
+for D in $(ls)
+do
+ if [[ $D = *"-"* ]]
+ then
+ LOCALCOUNT=$((LOCALCOUNT+1))
+ LOCALDISCOVERED+=($D)
+ else
+ for D2 in $(ls $D)
+ do
+ LOCALCOUNT=$((LOCALCOUNT+1))
+ LOCALDISCOVERED+=($D/$D2)
+ done
+ fi
+done
+
+ssh $REMOTE "
+cd $REMOTEDIR
+REMOTEDISCOVERED=()
+REMOTECOUNT=0
+
+for D in \$(ls)
+do
+ if [[ \$D = *"-"* ]]
+ then
+ REMOTECOUNT=\$((REMOTECOUNT+1))
+ REMOTEDISCOVERED+=(\$D)
+ else
+ for D2 in \$(ls \$D)
+ do
+ REMOTECOUNT=\$((REMOTECOUNT+1))
+ REMOTEDISCOVERED+=(\$D/\$D2)
+ done
+ fi
+done
+for (( i = 0 ; i <= \$REMOTECOUNT ; i++ ))
+do
+ echo \${REMOTEDISCOVERED[\$i]}
+done
+" > /tmp/remotemusiclist
+
+LOCALONLYCOUNT=0
+LOCALONLYMUSIC=()
+UNSYNCCOUNT=0
+for (( i = 0 ; i <= $LOCALCOUNT-1 ; i++ ))
+do
+ echo ${LOCALDISCOVERED[$i]} >> /tmp/localmusiclist
+ if grep -xq ${LOCALDISCOVERED[$i]} /tmp/remotemusiclist
+ then
+ echo -e "$WHITE${LOCALDISCOVERED[$i]}"
+ else
+ UNSYNCCOUNT=$((UNSYNCCOUNT+1))
+ LOCALONLYCOUNT=$((LOCALONLYCOUNT+1))
+ echo "$UNSYNCCOUNT. ${LOCALDISCOVERED[$i]}" >> /tmp/localonlymusicd
+ LOCALONLYMUSIC+=(${LOCALDISCOVERED[$i]})
+ fi
+done
+echo -e $BLUE
+cat /tmp/localonlymusicd
+REMOTEONLYCOUNT=0
+REMOTEONLYMUSIC=()
+while read p; do
+ if [[ $p != "" ]]
+ then
+ if ! grep -xq $p /tmp/localmusiclist
+ then
+ UNSYNCCOUNT=$((UNSYNCCOUNT+1))
+ REMOTEONLYCOUNT=$((REMOTEONLYCOUNT+1))
+ echo -e "$GREEN$UNSYNCCOUNT. $p"
+ REMOTEONLYMUSIC+=($p)
+ fi
+ fi
+done < /tmp/remotemusiclist
+echo -e $WHITE
+
+echo "Discovered $UNSYNCCOUNT unsynced albums"
+echo "Albums in BLUE are those that are only on the local machine. Albums in GREEN are those that are only on the remote machine. Albums in WHITE are those that are on both"
+read -p "Enter the indexes corresponding to the albums you wish to sync, separated by spaces: " INPUT
+
+for j in ${INPUT}
+do
+ if (( j <= $LOCALONLYCOUNT ))
+ then
+ FDIR=$LOCALDIR/${LOCALONLYMUSIC[$((j-1))]}
+ TDIR=$REMOTE:$REMOTEDIR/${LOCALONLYMUSIC[$((j-1))]}
+ COMMAND="rsync -avzP --mkpath $FDIR $TDIR"
+ echo $COMMAND >> /tmp/syncmusictorun
+ else
+ FDIR=$REMOTE:$REMOTEDIR/${REMOTEONLYMUSIC[$(($j-$LOCALONLYCOUNT-1))]}
+ TDIR=$LOCALDIR/${REMOTEONLYMUSIC[$(($j-$LOCALONLYCOUNT-1))]}
+ COMMAND="rsync -avzP --mkpath $FDIR $TDIR"
+ echo $COMMAND >> /tmp/syncmusictorun
+ fi
+done
+echo "WILL RUN: $(cat /tmp/syncmusictorun)"
+read -p "Enter y to confirm: " CONFIRM
+if [[ $CONFIRM = y ]]
+then
+ $(cat /tmp/syncmusictorun)
+fi
+rm /tmp/remotemusiclist
+rm /tmp/localmusiclist
+rm /tmp/localonlymusicd
+rm /tmp/syncmusictorun