Переменная переменная подстановки Bash?

Возможный дубликат:
Пакетное переименование файлов

Я хочу переименовать файлы, используя их существующее имя в качестве базы для новой.

Поэтому, если я могу эти файлы с помощью

 ls blue*+(.png) 

Я бы хотел переименовать их что-то вроде

 mv blue$(*)+(.png) $(1).png 

за исключением того, что это не работает. Есть ли синтаксис для этих переменных в bash globbing или есть более простой способ?

  • Невозможно создать фоновый процесс
  • Рекурсивно удалять файлы с именем «WIDTHxLENGTH» в имени в каталоге
  • Что означает синтаксис этой команды оболочки с помощью extglob?
  • Найти всех пользователей, которые имеют более N процессов и эхо их в оболочке
  • Ограничение размера файла превышено в bash
  • cp SOMEFILE .. копирует в другой каталог после cd'ing через символическую ссылку
  • Что означает `{{(выход 1); выход 1; }; } `означает?
  • Как искать определенные разделы файла, а затем извлекать только соответствующую информацию в этом разделе?
  • 4 Solutions collect form web for “Переменная переменная подстановки Bash?”

    Портативный способ сделать это

     for f in blue*.png; do mv -- "$f" "${f#blue}"; done 

    Все это требует mv и работает не только с bash но и с любой совместимой с POSIX оболочкой, которая поддерживает стандартное расширение параметра POSIX . Не требуется, чтобы ваша система имела zsh или определенную версию rename .

    Я не вижу в этом легкого способа сделать это, но, конечно, вы можете разбить проблему на несколько шагов, например, нарезать префикс, вспомнить расширение и затем заменить несколько экземпляров расширения на один.

     for file in blue*+(.png); do tmp="${file#blue}"; extension="${file##*.}"; echo "$file" "${tmp/%+(.$extension)/}.$extension";done 

    если вы довольны результатами, просто введите …

     ^echo^mv 

    и все волшебство произойдет. 🙂

    С bash:

     zsh -c ' autoload -U zmv zmv "blue(*).png" "\$1.png"' 

    ;-). Или, что более серьезно, вы обнаружите, что zmv zsh – очень мощный инструмент для всех видов переименования. В отличие от сценариев, которые вы можете придумать, этот инструмент (или любой другой инструмент, предназначенный для задачи, такой как mmv или переименование), берет на себя особую осторожность, чтобы не клоблировать файлы и, скорее всего, будет более устойчивым в угловых случаях.

    В Debian и деривативах (включая Ubuntu) есть команда переименования, которая может делать то, что вы хотите:

     rename -n "s/\+\.png/.png/" blue*+.png 

    Удалите флаг -n после тестирования и примените переименование.

    Эта команда rename – это Perl-скрипт, который нельзя путать с командой rename из пакета util-linux. Другие дистрибутивы могут предоставлять его как имя prename или rename.pl или вообще нет.

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