Попробуйте:
for f in *'('*')'*; do mv -i "$f" "${f/(*)/}"; done
Или для тех, кто предпочитает, чтобы их команды распределялись по нескольким строкам:
for f in *'('*')'*
do
mv -i "$f" "${f/(*)/}"
done
Как это работает
for f in *'('*')'*; do
Запускает цикл для всех файлов, имена которых содержат (
, за которыми следует )
.
mv -i "$f" "${f/(*)/}"
Это переименовывает эти файлы, удаляя парены и все, что находится между паренами.
"${f/(*)/}"
- это пример функции оболочки, называемой замена шаблона .Он ищет вхождение глобуса (*)
и заменяет его пустой строкой.Подробности смотрите в man bash
.
Опция -i
говорит mv
не перезаписывать целевой файл без запроса.Это необязательно.Вы можете вместо этого сделать резервную копию.Смотрите man mv
для получения дополнительной информации.
done
Сигнализирует об окончании цикла.
Пример
Давайте начнемв каталоге с этими файлами:
$ ls -1
Filename (region) 2.gba
Filename (region).gba
Теперь давайте запустим нашу команду:
$ for f in *'('*')'*; do mv -i "$f" "${f//(*)/}"; done
После нашей команды файлы имеют следующие имена:
$ ls -1
Filename 2.gba
Filename .gba