Вот обходчик каталога, костяк нужного, достающий имена, в т.ч. имя для подкаталога с конвертированными:
#!/bin/bash
targetDir="${1}" # из командной строки, первый аргумент
extensionToBeProcessed="mp4" # или ${2}, второй аргумент ...
if [ ! -d "${targetDir}" ] ; then
echo "Not found directory '${targetDir}'." >&2
exit 1
fi
while read foundFileName ; do
[ -z "${foundFileName}" ] && continue
shortInFileName="$( basename "${foundFileName}" )"
filePath="$( dirname "${foundFileName}" )"
[ "${filePath}" == "." ] && filePath="$( pwd )"
[ "${filePath}" == "~" ] && filePath="${HOME}"
outFileNameId="$(sed "s/\.${extensionToBeProcessed}//" <<< "${shortInFileName}" )"
# Более короткие, но более быстрые варианты:
#outFileNameId="${foundFileName/\.${extensionToBeProcessed}/}"
#outFileNameId="${foundFileName%\.*}"
#outFileNameId="${foundFileName%\.mp4}"
# При усложнении выражений может понадобится _предварительный_ вызов
#shopt -s extglob
echo "================================"
echo "Found file: ${foundFileName}"
echo "Dir: ${filePath}"
echo "Short name: ${shortInFileName}"
echo "Striped name: ${outFileNameId}"
done <<< "$( find "${targetDir}" -mindepth 1 -maxdepth 1 -type f -name "*.${extensionToBeProcessed}" )"
Надо бы убрать зависимость от регистра в расширении имени файла.
В данном конкретном случае "лечение" имени каталога в filePath должно бы быть в самом начале, и за пределами цикла, что ускоряет выполнение скрипта.