You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
scripts/bash/cleanupBeatSaberSongs.sh

50 lines
2.1 KiB

#!/bin/bash
# Edit the first line with the path to your Beat Saber folder
beatsaberroot='/mnt/a/SteamLibrary/steamapps/common/Beat Saber'
# Leave this one be
customsongpath='Beat Saber_Data/CustomLevels'
# These characters are not allowed in filenames (per Windows)
# and I also removed spaces to make it friendlier to work with
# (this is also a cheat to pull the strings from json without quotes)
badchars='" ,\\\/\:\*\?<>\|'
# Folder name = 40 hexadecimal characters
# ${#foldername} -eq 40
# Not a perfect looping function as it'll loop over the permissions separately but it works
for line in `ls -l "${beatsaberroot}/${customsongpath}"`; do
if [[ ${#line} -eq 40 ]]; then
folder="$line"
fulldir="${beatsaberroot}/${customsongpath}/${folder}"
# Some of my info.dat files are one big json string and my logic below dumps
# 2.0.0_songName-2.0.0_songName-2.0.0_songName insead of the actual info...
infolen=`wc -l "$fulldir/Info.dat" | cut -d' ' -f1`
# Set our variables outside the if so they're usable at the end
song='';artist='';mapper=''
if [[ $infolen -gt 0 ]]; then
# For the easy info.dat files just grab their information
song=`grep _songName "$fulldir/Info.dat" | cut -d: -f2 | sed "s/[$badchars]//g"`
artist=`grep _songAuthorName "$fulldir/Info.dat" | cut -d: -f2 | sed "s/[$badchars]//g"`
mapper=`grep _levelAuthorName "$fulldir/Info.dat" | cut -d: -f2 | sed "s/[$badchars]//g"`
#mv "${beatsaberroot}/${customsongpath}/${folder}" "$song-$artist-$mapper"
else
#tput setaf 1
# -f2 = Song name
# -f4 = Artist
# -f5 = Mapper
song=`cat "$fulldir/info.dat" | cut -d, -f2 | cut -d: -f2 | sed "s/[$badchars]//g"`
artist=`cat "$fulldir/info.dat" | cut -d, -f4 | cut -d: -f2 | sed "s/[$badchars]//g"`
mapper=`cat "$fulldir/info.dat" | cut -d, -f5 | cut -d: -f2 | sed "s/[$badchars]//g"`
fi
mv "$fulldir" "${beatsaberroot}/${customsongpath}/$song-$artist-$mapper" 2>/dev/null
[ $? -eq 0 ] && tput setaf 2 || tput setaf 1
echo "${folder} is really $song-$artist-$mapper"
tput sgr0
fi
done
echo "\nRed means the folder could not be renamed (destination name already exists?) and green means everything should be good!"