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

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

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

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

  • Содержит ли мягкая привязка к каталогу жесткие ссылки на его подфайлы?
  • cp / etc / DIR_COLORS ~ / .dir_colors не отвечает
  • Зацикливание файлов с пробелами в именах?
  • Не удается получить доступ к внешнему жесткому диску.
  • Каков эффект разрешения файлов на системном уровне?
  • Создание дубликата пути в Unix
  • Почему некоторые символические ссылки влияют на поведение программы?
  • Сопоставление путей Windows к путям Linux для VirtualBox
  • 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 - лучшая ОС в мире.