115 lines
2.5 KiB
Bash
115 lines
2.5 KiB
Bash
#! /bin/bash
|
|
|
|
#ASSUMPTIONS
|
|
#-fs on card is FAT32
|
|
|
|
#recursive file navigator to loop through everything
|
|
function sync()
|
|
{
|
|
for i in "$1"/*; do
|
|
#new file name without special chars to adhere to FAT32 limitations
|
|
fat_path=${i//"?"/""}
|
|
fat_path=${fat_path//"*"/""}
|
|
fat_path=${fat_path//"<"/""}
|
|
fat_path=${fat_path//">"/""}
|
|
fat_path=${fat_path//"|"/""}
|
|
fat_path=${fat_path//":"/""}
|
|
|
|
fat_name="${fat_path##*/}"
|
|
|
|
#if directory then call self and loop
|
|
if [ -d "$i" ]; then
|
|
|
|
if [ ! -d "$fat_name" ]; then
|
|
#mkdir "${fat_path##*/}"
|
|
mkdir "$fat_name"
|
|
fi
|
|
|
|
#cd "${fat_path##*/}"
|
|
cd "$fat_name"
|
|
sync "$i"
|
|
cd ../
|
|
#if file then check
|
|
else
|
|
|
|
if [ -f "$fat_name" ] || \
|
|
[ -f "${fat_name//.flac/.mp4}" ] || \
|
|
[ -f "${fat_name//.flac/.aac}" ] || \
|
|
[ -f "${fat_name//.flac/.m4a}" ]; then
|
|
echo skipping "$fat_name"
|
|
else
|
|
echo $fat_path
|
|
#if these then copy (remove cover art)
|
|
if [ "${i: -4}" == ".mp3" -o \
|
|
"${i: -4}" == ".mp4" -o \
|
|
"${i: -4}" == ".m4a" -o \
|
|
"${i: -4}" == ".aac" -o \
|
|
"${i: -5}" == ".opus" ]; then
|
|
|
|
#~ cp "$i" "$fat_name"
|
|
ffmpeg -i "$i" -vn -codec:a copy "$fat_name"
|
|
#if flac then convert to m4a (if flag is not raised)
|
|
elif [ "${i: -5}" == ".flac" ]; then
|
|
if [ "$conv" == 1 ]; then
|
|
trimmed_name=${fat_path##*/}
|
|
ffmpeg -i "$i" -aq $quality -vn -strict -2 "${trimmed_name%%.flac}".m4a
|
|
else
|
|
#~ cp "$i" "$fat_name"
|
|
ffmpeg -i "$i" -vn -codec:a copy "$fat_name"
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
help()
|
|
{
|
|
cat << EOF
|
|
help: $0 options
|
|
|
|
Sync memory device with music folder on ssd
|
|
Files will be saved/synced to current directory
|
|
If flac files are found they will be converted to m4a to conserve space
|
|
|
|
Uses ffmpeg
|
|
|
|
OPTIONS:
|
|
-h You know what this is obviously
|
|
-c Do not convert flac to mp4
|
|
-q Quality (defaults to 2; 200-250 kbps)
|
|
-f Source Folder (defaults to ~/Music)
|
|
|
|
Note: if bit is given it will be used instead of quality
|
|
|
|
EOF
|
|
}
|
|
|
|
conv=1
|
|
quality=2 #highest quality
|
|
folder="$HOME/Music"
|
|
|
|
while getopts “hcf:q:” OPTION
|
|
do
|
|
case $OPTION in
|
|
h)
|
|
help
|
|
exit 1
|
|
;;
|
|
c)
|
|
conv=0
|
|
;;
|
|
q)
|
|
quality=$OPTARG
|
|
;;
|
|
f)
|
|
folder=$OPTARG
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
sync "$folder"
|