Isso é simples:
Estamos trabalhando em um loop for em todos os arquivos, cujo nome contém um ' ?
'.
Esse loop chama um comando mv
(== rename) com todos esses arquivos, mais esses nomes de arquivos sem a parte deles depois que ' ?
'.
O comando exato é o seguinte:
for i in *\?*;do mv -vf "${i}" "${i%%\?*}";done
O que parece ser um pouco enigmático, é o "${i%%\?*}"
. Isso significa: "a variável chamada 'i', removida de sua cauda depois de um ' ?
'.
Há também um pouco de coisa enigmática, que é a parte *\?*
. Isso significa todos os arquivos no diretório atual, cujo nome contém um ' ?
'. Este é um padrão, assim como em (win) do (w) s, a única diferença é que ' ?
' significa por padrão todos os caracteres. A barra invertida (' \
') é usada para remover esse significado especial disso.