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.
50 lines
2.1 KiB
50 lines
2.1 KiB
4 years ago
|
#!/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!"
|