Для надежного варианта, который должен работать в любой POSIX-совместимой системе, вы можете использовать
find . -type f -name "*\?*" -exec sh -c 'mv -- "$1" "${1%%\?*}"' findshell {} \;
$1
- это имя каждого найденного файла, а ${1%%\?*}
- это конструкция, которая удаляет подстроку. начиная с вопросительного знака.
Этого должно быть достаточно, если у вас есть несколько подходящих файлов. Если вам это нужно, более эффективная альтернатива -
find . -type f -name "*\?*" -exec sh -c '
for file in "$@"; do
mv -- "$file" "${file%%\?*}"
done
' findshell {} +