s0rename.sh 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/bin/bash
  2. MAX_MOVE=25
  3. PREFIX="${1}"
  4. if [ -z "${PREFIX}" ]; then
  5. echo "Usage: ${0} PREFIX" 1>&2
  6. exit 1
  7. fi
  8. # Validate the prefix
  9. NUM="`echo "${PREFIX}" | sed 's%^S0E\(20[0-9]*\)$%\1%'`"
  10. if [ -z "${NUM}" ] || ! echo "${NUM}" | grep -Eq '^[0-9]+$'; then
  11. echo "Invalid prefix: ${PREFIX}" 1>&2
  12. exit 1
  13. fi
  14. # Find the NFO and MKV
  15. YTID=""
  16. shopt -s nullglob
  17. for i in "${PREFIX}"*; do
  18. ID="`echo "${i}" | sed 's%^S0E[0-9]* - \(.*\)\.[mn][kf][vo]$%\1%'`"
  19. if [ -z "${ID}" ]; then
  20. echo "Invalid YTID for: ${i}" 1>&2
  21. exit 1
  22. fi
  23. if [ -z "${YTID}" ]; then
  24. YTID="${ID}"
  25. elif [ "${ID}" != "${YTID}" ]; then
  26. echo "Moving ${YTID}, leaving ${ID}" 1>&2
  27. continue
  28. fi
  29. TYPE="`echo "${i}" | sed 's%^.*\.\([mn][kf][vo]\)$%\1%'`"
  30. if [ -z "${TYPE}" ]; then
  31. echo "Invalid file extension for: ${i}" 1>&2
  32. exit 1
  33. fi
  34. if [ "${TYPE}" == "nfo" ]; then
  35. NFO="${i}"
  36. elif [ "${TYPE}" == "mkv" ]; then
  37. MKV="${i}"
  38. else
  39. echo "Unknown file type for: ${i}" 1>&2
  40. exit 1
  41. fi
  42. done
  43. if [ -z "${MKV}" ] || [ -z "${NFO}" ]; then
  44. echo "Unable to find an NFO/MKV set for: ${PREFIX}" 1>&2
  45. exit 1
  46. fi
  47. function checkNew() {
  48. if [ -z "${NUM_NEW}" ]; then
  49. COUNT=0
  50. for foo in "S0E${1}"*; do
  51. COUNT=$(( $COUNT + 1 ))
  52. done
  53. if [ $COUNT -eq 0 ]; then
  54. NUM_NEW=$1
  55. fi
  56. fi
  57. }
  58. # Find a new file name
  59. NUM_NEW=""
  60. i=1
  61. while [ $i -lt $MAX_MOVE ]; do
  62. checkNew $(( NUM + $i ))
  63. checkNew $(( NUM - $i ))
  64. i=$(( $i + 1 ))
  65. done
  66. if [ -z "${NUM_NEW}" ]; then
  67. echo "Unable to find new number for: ${PREFIX}" 1>&2
  68. exit 1
  69. fi
  70. # Rename the files
  71. MKV_NEW="S0E${NUM_NEW} - ${YTID}.mkv"
  72. NFO_NEW="S0E${NUM_NEW} - ${YTID}.nfo"
  73. sudo chattr -i "${MKV}" "${NFO}" && \
  74. mv -v "${MKV}" "${MKV_NEW}" && \
  75. mv -v "${NFO}" "${NFO_NEW}"
  76. # Renumber the NFO
  77. sed -i 's%<episode>[0-9]*<\/episode>%<episode>'"${NUM_NEW}"'<\/episode>%' "${NFO_NEW}"