Я искал способ переименовать огромное количество файлов с одинаковыми именами, очень похоже на этот (вопрос, связанный с Windows), за исключением того, что я использую * nix (Ubuntu и FreeBSD, отдельно). Чтобы подвести итог, при использовании оболочки (Bash, CSH и т. Д.), Как мне переименовать несколько файлов, например, следующие файлы:
Бетховен - Мех Elise.mp3
Бетховен - Лунная соната.mp3
Бетховен - Ода радости.mp3
Бетховен - Ярость над потерянным Пенни.mp3
будут переименованы как эти?
Мех Elise.mp3
Лунная соната.mp3
Ода радости.mp3
Ярость над потерянным Пенни.mp3
Причина, по которой я хочу сделать это, состоит в том, что эта коллекция файлов будет находиться в каталоге с именем «Бетховен» (то есть префикс имени файла), и наличие этой информации в самом имени файла будет избыточным.
Подобно многим вещам в Linux / Unix, существует несколько способов сделать это!
Некоторые могут использовать mmv (масса mv).
Команда rename или prename, которая поставляется с некоторыми пакетами Perl (более новыми Ubuntu и Debian), может сделать это также.
Обратите внимание, что инструмент переименования в Fedora 10 не та же программа, что и эта, и работает по-другому. Он является частью другого пакета util-linux-ng и может быть найден здесь .
Я часто просто захожу в оболочку по привычке (ведь таких инструментов не всегда было).
Это создаст каталог Бетховена, затем переместит файл в этот каталог / имя файла, где имя файла заменено на «Бетховен -» ничем.
В качестве теста, прежде чем:
После:
источник
Попробуйте это решение, реализованное с использованием комбинации grep и rename. Это предполагает, что у вас есть целая куча каталогов, которые вам нужно переименовать. Если бы их было всего несколько, я бы использовал ручной подход, с шаблоном «Artist -», жестко закодированным для каждого.
Объяснение find :
Команда find находит все файлы с расширением .mp3 в текущей файловой иерархии и вызывает аргумент, передаваемый -exec для каждого. Обратите внимание , что в -exec , {} относится к аргументу , принятой находкой (путь к файлу + имя). В
\;
Гарантирует;
получает передается переименовать и вместо того , что указывает на конец находки команды.Указанная выше команда имеет ключ -n (без действия); следовательно, он скажет вам только то, что произойдет, если вы запустите его. Я рекомендую запускать эту команду без ключа -n только после того, как вы запустите ее один раз и будете удовлетворены предлагаемыми результатами.
Теперь для регулярного выражения.
^
соответствует началу строки.$
соответствует концу строки..
соответствует любому персонажу.*
означает ноль или более предшествующей конструкции. Например,.*
означает ноль или более символов.\s
обозначает любой космический символ.\S
обозначает любой не пробельный символ.()
получает захвачены и отражается как$1
,$2
в зависимости от его положения.Регулярное выражение:
(.*/)
-
":.*-
(.*)
Вот мой тестовый прогон:
Regexp - дело непростое, и я написал немало ошибок, написав их, так что я бы приветствовал любой вклад в отсутствие этого достоинства. Я знаю, что нашел немало проверяющих это.
источник
Я собрал Java-программу командной строки, которая делает переименование файлов (и каталогов) быстрым, особенно для сценариев. Это бесплатно и с открытым исходным кодом, так что вы можете изменить его в соответствии с вашим сердцем:
RenameWand
http://renamewand.sourceforge.net/
Некоторые соответствующие примеры использования:
Переместите файлы формы
"<a> - <b>"
в соответствующий каталог"<a>"
:Сортируйте файлы по времени последнего изменения и переименуйте их по 3-значному номеру:
Переставьте части имени файла и измените регистр:
источник
zmv
Инструмент переименования zsh очень хорош.Больше заметок здесь ...
источник
Для пингвинов это легко сделать с помощью сценария оболочки или сценария AWK. Для нас, простых смертных, вы можете попробовать Midnight Commander. Это в большинстве дистрибутивов Linux, из командной строки введите mc -a. Вы можете переименовывать файлы, используя регулярные выражения. Я использовал статью в GeekStuff http://www.thegeekstuff.com/2009/06/how-to-rename-files-in-group/, чтобы помочь мне.
источник
Вот простой пример командной строки. У меня было слово «белый» в середине названия группы файлов PNG. Я хотел убрать это и оставить только одно подчеркивание. Это сделал трюк:
источник
Используйте vidir, а затем используйте функции редактора, чтобы применить шаблон переименования.
источник
На * NIX без Perl
rename
доступныВ некоторых * nix переименование недоступно, поэтому необходимо выполнить переименование другим способом. Несколько лет назад я предложил
zmv
здесь, что, хотя и здорово, но не обязательно доступно.Используя встроенные функции и sed, мы можем быстро создать сценарий оболочки, чтобы сделать это, что дает нам синтаксис, очень похожий на сценарий perl-переименования, и, хотя ему не хватает изощренности в обработке ошибок, он выполняет свою работу.
использование
Скажем, мы тоже хотели создать целевые папки ...
Поскольку
mv
папки не создаются, мы не можем их использовать,sedrename
как здесь, но это довольно небольшое изменение, поэтому я думаю, что было бы неплохо включить их тоже.Нам нужна служебная функция
abspath
(или абсолютный путь), чтобы мы могли сгенерировать целевую папку (и) для шаблона sed / rename, который включает новую структуру папок.Это гарантирует, что мы знаем имена наших целевых папок. Когда мы переименуем, нам нужно будет использовать его в имени целевого файла.
Вот полный сценарий с поддержкой папок ...
Конечно, это все еще работает, когда у нас нет определенных целевых папок.
Если мы хотим поместить все песни в папку,
./Beethoven/
мы можем сделать это:использование
Бонус раунд ...
Используя этот скрипт для перемещения файлов из папок в одну папку:
Предполагая, что мы хотим собрать все соответствующие файлы и поместить их в текущую папку, мы можем сделать это:
Обратите внимание на шаблоны регулярных выражений
В этом сценарии применяются правила регулярных шаблонов sed, эти шаблоны не являются PCRE (регулярные выражения, совместимые с Perl). Вы могли бы использовать расширенный синтаксис регулярных выражений, используя один
sed -r
или вsed -E
зависимости от вашей платформы.См. POSIX-совместимое
man re_format
для полного описания основных и расширенных шаблонов регулярных выражений.источник