Например, я хочу mv (.*?).sql $1.php
,
Есть ли команда, которая позволяет мне указать шаблоны переименования?
источник
Например, я хочу mv (.*?).sql $1.php
,
Есть ли команда, которая позволяет мне указать шаблоны переименования?
Как уже упоминали другие, rename
это хорошо, но прочитайте man-страницу ( man rename
), прежде чем попробовать. Существует как минимум два совершенно разных инструмента, rename
которые будут называться, и какой у вас будет зависеть от вашего дистрибутива. Называть их неправильно может быть опасно.
Вот справочная страница для версии на основе Perl Ларри Уолла, которая поставляется с Ubuntu. Вы даете ему выражение Perl, какrename 's/\.sql$/.php/' *.sql
Вот справочная страница для переименования, которая поставляется со старыми дистрибутивами Red Hat и CentOS. Использование простое подстановка строк, какrename .sql .php *.sql
Вы также можете использовать bash one-liner для обработки каждого файла по одному:
$ for f in *.sql; do mv -i "$f" "${f%%.*}.php"; done
rename
функции (например, busybox)Есть
rename(1)
, который не использует регулярные выражения, но может решить вашу проблему:Там тоже
mmv(1)
, но я незнаком с тем, как это работает.источник
/usr/bin/rename
ссылки/usr/bin/prename
по умолчанию, что требует регулярных выражений.G'day,
Вы также можете попробовать войти
Или, чтобы заставить это использовать регулярное выражение, измените это немного, чтобы
для немного веселья кодирования оболочки. (-:
источник
ls
нужно разбирать вывод .sed
пример неплохой.Будучи водопроводчиком, я люблю трубы :)
Примечание: этот ответ многословен - как новичок, я ценю, когда кто-то, кто знает, находит время, чтобы объяснить, поэтому я плачу «вперед». Если вы не новичок, прошу прощения за длину и многословие.
Где:
перечисляет все файлы, соответствующие шаблону, в этом случае я ищу файлы с датой в имени файла в форме «ГГГГММДД»
^ 1: 1-я группа захвата - все имя файла
^ 2: 2-я группа захвата - 1-я часть шаблона имени файла
^ 3: 3-я группа захвата - вторая часть имени файла - здесь, дата в формате «ГГГГММДД»
^ 4: 4-я группа захвата - необязательная часть имени файла между датой и расширением и само расширение
Оооочень .... если у меня есть файл с именем
...тогда
на самом деле означает
Обратите внимание, что выходные данные команды sed передаются в 'bash' для ее выполнения. Чтобы сначала увидеть предлагаемые перемещения файлов БЕЗ их фактического перемещения, сначала удалите '| bash 'в конце, и попробуйте так:
Это вообще не изменится, но вы увидите команду, которая будет выполнена, если вы запустите ее с помощью '| bash 'помечен на конце.
Это полезно, потому что вы можете создавать любые подкаталоги, которые вы хотите, из частей в имени файла, или что-либо еще, что вы добавляете к тексту «замены» в команде sed. Обратите внимание, что sed требует много экранирующих символов.
SED Regex скобки:
(...) требуется экранирование для группировки захвата -> \ (... \)
{m, n} требует экранирования для количественной оценки предыдущего объекта -> \ {m, n \}
/ требует экранирования в строке замены -> \ /
[...] НЕ требуется экранирование для классов персонажей
\ 1 в строке замены относится к 1-й захваченной группе и так далее ...
ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ: НИКОГДА НЕ ТРУПИТЕ НИЧЕГО, ЧТОБЫ «БЫТЬ», ЕСЛИ ВЫ ПОЛНОСТЬЮ НЕ ПОНИМАЕТЕ РЕЗУЛЬТАТ ...
Надеюсь, что это поможет устранить некоторые блокировки :)
источник
Установите
mmv
, затем сделайте это:источник