mkvRename 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/bin/bash
  2. MIN_SIZE=$(( 100 * 1024 * 1024 ))
  3. INPUT="${1}"
  4. if [ -z "${INPUT}" ] || [ ! -r "${INPUT}" ]; then
  5. echo "Invalid file: ${INPUT}" 1>&2
  6. exit 1
  7. fi
  8. BASE="`echo "${INPUT}" | \
  9. sed 's%\.mkv\.[a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]$%.mkv%i' | \
  10. sed 's%\-recode\.mkv$%.mkv%i' | \
  11. sed 's%\.mkv$%%i' | \
  12. sed 's%\.mp4$%%i' | \
  13. sed 's%\.avi$%%i'`"
  14. if [ -z "${BASE}" ] || [ "${BASE}" == "${INPUT}" ]; then
  15. echo "Unable to extract base name from: ${INPUT}" 1>&2
  16. exit 1
  17. fi
  18. OUTPUT="${BASE}.mkv"
  19. OTHER=""
  20. DEL_OTHER=""
  21. RENAME_MKV=""
  22. for i in "${BASE}"*; do
  23. if [ "${i}" == "${OUTPUT}" ]; then
  24. continue
  25. fi
  26. if [ ! -s "${i}" ]; then
  27. if [ -z "${QUIET}" ]; then
  28. echo "Removing empty file: ${i}"
  29. fi
  30. rm -f "${i}"
  31. continue
  32. fi
  33. if echo "${i}" | grep -Eq '\.avi$'; then
  34. DEL_OTHER="${i}"
  35. elif echo "${i}" | grep -Eq '\.mp4$'; then
  36. DEL_OTHER="${i}"
  37. fi
  38. if echo "${i}" | grep -Eq '\-recode\.mkv$'; then
  39. RENAME_MKV="${i}"
  40. elif echo "${i}" | grep -Eiq '\.mkv\.[a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]$'; then
  41. RENAME_MKV="${i}"
  42. fi
  43. OTHER="${i}"
  44. done
  45. if [ -n "${DEL_OTHER}" ]; then
  46. if [ `stat -c '%s' "${DEL_OTHER}"` -lt $MIN_SIZE ]; then
  47. echo "File too small: ${DEL_OTHER}" 1>&2
  48. DEL_OTHER=""
  49. fi
  50. fi
  51. if [ -n "${RENAME_MKV}" ]; then
  52. if [ `stat -c '%s' "${RENAME_MKV}"` -lt $MIN_SIZE ]; then
  53. echo "File too small: ${RENAME_MKV}" 1>&2
  54. RENAME_MKV=""
  55. fi
  56. fi
  57. if [ -z "${DEL_OTHER}" ] && [ -z "${RENAME_MKV}" ]; then
  58. echo "Unable to determine pair file for: ${INPUT}" 1>&2
  59. exit 1
  60. fi
  61. if [ -n "${DEBUG}" ] && [ "${DEBUG}" != "0" ]; then
  62. echo "Input: ${INPUT}"
  63. echo "Base: ${BASE}"
  64. ls "${BASE}"* 2>/dev/null
  65. echo "Other: ${OTHER}"
  66. echo "Output: ${OUTPUT}"
  67. echo "Output exists: ${OUTPUT_EXISTS}"
  68. echo "Delete other: ${DEL_OTHER}"
  69. echo "Rename MKV: ${RENAME_MKV}"
  70. fi
  71. ACTION=0
  72. if [ -r "${RENAME_MKV}" ]; then
  73. if [ -z "${QUIET}" ]; then
  74. echo "Renaming MKV file ${RENAME_MKV} to ${OUTPUT}"
  75. fi
  76. mv "${RENAME_MKV}" "${OUTPUT}"
  77. ACTION=1
  78. fi
  79. if [ -r "${OUTPUT}" ] && [ -r "${DEL_OTHER}" ]; then
  80. if [ -z "${QUIET}" ]; then
  81. echo "Deleting non-MKV file: ${DEL_OTHER}"
  82. fi
  83. rm -f "${DEL_OTHER}"
  84. ACTION=1
  85. fi
  86. if [ $ACTION -le 0 ]; then
  87. echo "Unable to determine action for: ${INPUT}" 1>&2
  88. echo "Related files: `ls "${BASE}."* 2>/dev/null`" 1>&2
  89. exit 1
  90. fi
  91. exit 0