Удалить параметры GET из имен файлов в каталоге

Мне нужно удалить часть, начиная с ? из группы файлов с именами, такими как image.jpg?foo=bar&bar=foo . Кто-нибудь, пожалуйста, покажите мне, как это делается?

По некоторым причинам эти команды не работают:

 rename "\?." "" * rename 's/(.*)\.jpg\?.*/$1\.jpg/' * 

  • Как Linux обрабатывает несколько последовательных разделителей путей (/ home //// имя пользователя / / файл)?
  • Как удалить неудавшийся файл с обратным пространством в его имени?
  • автозаполнение в сценарии оболочки
  • Точки в пути
  • Как интерпретация оболочки ././command-name?
  • Как совместить суффикс имени файла
  • Замените точки символами подчеркивания в именах файлов, оставив неизменным
  • Несколько вопросов о кодировке символов файловой системы в Linux
  • One Solution collect form web for “Удалить параметры GET из имен файлов в каталоге”

    Это просто:

    Мы работаем в цикле for для каждого файла, чье имя содержит ' ? ».

    Это для цикла вызывает команду mv (== rename) со всеми этими файлами, плюс эти имена файлов без их части после этого ? ».

    Точная команда следующая:

     for i in *\?*;do mv -vf "${i}" "${i%%\?*}";done 

    Кажется, что это немного загадочно, это "${i%%\?*}" . Это означает: «переменная с именем« i », удаленная из ее хвоста все после« ? ».

    Существует также немного загадочная вещь, то есть часть *\?* . Это означает, что каждый файл в текущем каталоге, чье имя содержит ? ». Это шаблон, как и в (win) do (w) s, единственное отличие состоит в том, что ' ? 'означает по умолчанию каждый символ. Обратная косая черта (' \ ') используется для удаления этого специального значения.

    Linux и Unix - лучшая ОС в мире.