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

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

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

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

 ls blue*+(.png) 

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

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

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

  • Является ли суб-оболочка той же самой, что и дочерняя оболочка
  • Почему ошибки OS X `install` на перенаправленном входе, когда одна и та же версия` install` на linux работает нормально?
  • Расширяет ли расширение zsh по-разному в неинтерактивных скриптах?
  • Почему знак «меньше» не работает в качестве замены кошки в bash?
  • Переименование содержимого всей папки
  • Получить последнюю минуту из строк из списка
  • Как получить общий размер всего в каталоге в одной строке?
  • Как запустить java-службу как пользователя без полномочий root на CentOs 6
  • 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 или вообще нет.

    Interesting Posts

    Подождите несколько процессов, распечатайте код выхода, если какой-либо процесс завершит работу

    Что считается изменением или изменением файла?

    В чем разница между `dd`,` cp` и `rsync`?

    переназначение Caps Lock на клавишу Ctrl в tmux

    Как вставлять субтитры в видео с помощью ffmpeg?

    Храните ту же ширину среднего столбца в макете ThreeColMid в xmonad

    Подключение к KVM без использования графического интерфейса CentOS 6.4 с использованием MobaXterm

    Узнайте, что такое «apt-get install»

    Демон SSH не установлен в встроенном устройстве Linux

    1: 1. Ядро с ядерным статусом 3.16 или более поздней версии с использованием TC

    Анализ аргументов командной строки из pargs в сценарии оболочки

    Automake – проблема с установкой версии automake-1.14.1

    Как вы делаете Amarok пропускать видеофайлы при сканировании своей библиотеки?

    Что такое mintstick.py и как его установить?

    Виртуальный файл, сделанный из меньших (для решения с малым решением)

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