Как я могу удалить символы в скобках из имен файлов? - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть список имен файлов в форме:

Filename (region).gba

И я хотел бы переименовать их все без тега (region).

Как это сделать, используястандартные инструменты командной строки?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Попробуйте:

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
0 голосов
/ 16 декабря 2018

Вы можете использовать sed для решения этой проблемы.

ls * | sed 's/\(.*\) \([(].*[)]\).*/mv "\1 \2.gba" "\1.gba"/g'

В этом списке будут перечислены mv команды для перемещения файлов.Передайте через sh или bash для фактического выполнения.

Для объяснения:

  1. ls * перечисляет файлы в каталоге
  2. sed будетредактировать поступающие строки.
  3. 's/ начинается подстановка
  4. \(.*\) соответствует нерегионной части имени файла в группе захвата 1
  5. \([(].*[)]\).*соответствует оставшейся части имени файла, за исключением того, что расширение
  6. /mv "\1 \2.ext" "\1.ext"/g' составляет команду mv и завершает подстановку.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...