-iname
оценивает его аргумент *
, ?
и []
имеют особое значение для него, так что вы должны избавиться от них, если вы хотите, чтобы передать их в буквальном смысле.
Также рассмотрите возможность использования -quit
в случае, если вы в противном случае найдете два или более файлов в разных папках (дубликаты?). Я предполагаю, что вы ожидаете, dname
чтобы быть одним именем каталога.
Я понимаю, $video
что уже дано:
video="[HD, 1920x1080] - Wild Wild West.mp4"
В этом случае попробуйте:
video1=$(echo $video | sed 's|\[|\\[|g; s|\]|\\]|g') dname=$(find /run/media/user/usbdisk -type f -iname "$video1" -exec dirname {} \; -quit)
Это можно сделать в одну строку. Я решил ввести дополнительную переменную для ясности.