Я думаю, что это то, что вы ищете с точки зрения замены параметров:
$ ls -C1
first-unknown.js?ver=111
second-unknown.js?ver=222
third-unknown.js?ver=333
$ for f in *.js\?ver=*; do echo ${f%\?*}; done
first-unknown.js
second-unknown.js
third-unknown.js
Обратите внимание, что мы исключаем ?
как \?
, чтобы сказать, что мы хотим соответствовать буквальному вопросительному знаку, отличая его от специального символа глобуса, который соответствует любому отдельному символу.
Переименование файлов будет выглядеть примерно так:
$ for f in *.js\?ver=*; do echo "mv $f ${f%\?*}"; done
mv first-unknown.js?ver=111 first-unknown.js
mv second-unknown.js?ver=222 second-unknown.js
mv third-unknown.js?ver=333 third-unknown.js
Лично мне нравится выводить команды, сохранять их вфайл, убедитесь, что это то, что мне нужно, и затем запустите файл как сценарий оболочки.
Если это необходимо полностью автоматизировать, вы можете удалить echo и выполнить mv
напрямую.