Массовое переименование, *отклоняют версию

Я искал способ переименовать огромное количество так же названных файлов, во многом как этот (связанный с Windows вопрос) за исключением того, что я использую *, отклоняют (Ubuntu и FreeBSD, отдельно). Просто, таким образом, при использовании оболочки (Bash, CSH, и т.д.), как делают меня, масса - переименовывает много файлов, таким образом что, например, следующие файлы:

Beethoven - Мех Elise.mp3
Beethoven - Лунный свет Sonata.mp3
Beethoven - Ода к Joy.mp3
Beethoven - Бушуйте по потерянному Penny.mp3

будет переименован как они?

Мех Elise.mp3
Лунный свет Sonata.mp3
Ода к Joy.mp3
Бушуйте по потерянному Penny.mp3

Причина, которую я хочу сделать, это - то, что они, набор файлов пойдет в соответствии с каталогом по имени "Beethoven" (т.е. префикс имен файлов), и имеющий эту информацию о самом имени файла, будут избыточны.

11
задан 20.03.2017, 12:17

7 ответов

Переименовать утилита сделает то, что Вы хотите.

Просто используйте rename 's/Beethoven\ -\ //g' *.mp3

12
ответ дан 07.12.2019, 12:12

Как столько вещей с Linux/Unix, существует больше чем один способ сделать это!

Некоторые могли бы использовать mmv (масса mv).

Переименовывание или команда перед именем, которая идет с некоторыми пакетами Perl (более новая Ubuntu и Debian) может сделать это также.

prename 's/Beethoven\ -\ //g' Beethoven*.mp3

Обратите внимание, что переименовать инструмент на Fedora 10 не является той же программой как это и работает по-другому. Это - часть другого пакета, util-linux-ng и может быть найдено здесь.

Я часто просто перехожу к оболочке для цикла из привычки (после того, как все такие инструменты не всегда существовали).

mkdir -p Beethoven
for x in Beethoven\ -\ *
do
mv "$x" Beethoven/"${x/Beethoven - /}"
done

Это создаст каталог Beethoven, затем переместить файл в тот каталог/имя файла, где имя файла имеет "Beethoven -" замененный ничем.

Как тест, прежде:

$ ls
Beethoven - Fur Elise.mp3                 Beethoven - Ode to Joy.mp3
Beethoven - Moonlight Sonata.mp3          Beethoven - Rage Over the Lost Penny.mp3

После:

$ ls Beethoven/
Fur Elise.mp3                 Ode to Joy.mp3
Moonlight Sonata.mp3          Rage Over the Lost Penny.mp3
10
ответ дан 07.12.2019, 12:12

Попробуйте это решение, реализованное использование комбинации grep и переименуйте. Это предполагает, что у Вас есть целый набор каталогов, которые необходимо переименовать. Если бы существуют только некоторые, я пошел бы с ручным подходом с "Художником -" шаблон hardcoded для каждого.

# Rename any mp3 files in the directory hierarchy of type "a - b.mp3" to "b.mp3"
find . -name "*.mp3" -exec rename -n -v 's|^(.*/).*-\s*(.*)\s*$|$1$2|g' {} \;

Объяснение находки:
Команда находки находит все файлы с .mp3 расширением в текущей файловой иерархии и звонит, аргумент передал - должностное лицо для каждого. Обратите внимание, что в - должностное лицо, {} обращается к аргументу, мимо которого проходят, находят (файл path+name). \; удостоверяется ; передается для переименования и вместо того, чтобы указать на конец команды находки.

Команда, данная выше, имеет-n (никакое действие) переключатель; следовательно это только скажет Вам, что произошло бы, если бы Вы выполнили его. Я рекомендую выполнить эту команду без переключателя-n только после того, как Вы выполнили его однажды и удовлетворены предложенными результатами.

Теперь для regexp.

  • ^ матчи начинаются строки.
  • $ соответствует концу строки.
  • . соответствия любой символ.
  • * нуль средств или больше предыдущей конструкции. например, .* нуль средств или больше символов.
  • \s обозначает любой пробел.
  • \S обозначает любой непробел.
  • Что-либо в () получен и отражается как $1, $2, В зависимости от его положения.

regexp:

  • Ищет дополнительную структуру каталогов в запуске, получения это в 1$: (.*/)
  • Пропуски все до"-" : .*-
  • Остальная часть получений строки, за исключением продвижения и конечных пробелов, в 2$: (.*)
  • Переписывает файл как $1$ 2, который должен быть "/path/to/file / "filename.mp3"

Вот мой тестовый прогон:

/tmp/test$ ls -R
.:
a  b  c  z-unknown.mp3

./a:
a3.mp3                 a - longer title3.mp3  c.mp3   disc2
a - longer title2.mp3  a - long title.mp3     disc 1  the band - the title.mp3

./a/disc 1:
a - title1.mp3  a - title2.mp3

./a/disc2:
a - title1.mp3  a - title2.mp3

./b:
cd - ab - title3.mp3  cd - title1.mp3  cd - title2.mp3  c.mp3

./c:
c-pony2.mp4  c - pony3.mp3  c - pony4.mp3  c-pony.mp3

/tmp/test$ find . -name "*.mp3" -exec rename -v 's|^(.*/).*-\s*(.*)\s*$|$1$2|g' {} \;
./c/c-pony.mp3 renamed as ./c/pony.mp3
./c/c - pony4.mp3 renamed as ./c/pony4.mp3
./c/c - pony3.mp3 renamed as ./c/pony3.mp3
./z-unknown.mp3 renamed as ./unknown.mp3
./a/the band - the title.mp3 renamed as ./a/the title.mp3
./a/a - longer title2.mp3 renamed as ./a/longer title2.mp3
./a/a - longer title3.mp3 renamed as ./a/longer title3.mp3
./a/disc 1/a - title1.mp3 renamed as ./a/disc 1/title1.mp3
./a/disc 1/a - title2.mp3 renamed as ./a/disc 1/title2.mp3
./a/a - long title.mp3 renamed as ./a/long title.mp3
./a/disc2/a - title1.mp3 renamed as ./a/disc2/title1.mp3
./a/disc2/a - title2.mp3 renamed as ./a/disc2/title2.mp3
./b/cd - title1.mp3 renamed as ./b/title1.mp3
./b/cd - title2.mp3 renamed as ./b/title2.mp3
./b/cd - ab - title3.mp3 renamed as ./b/title3.mp3

/tmp/test$ ls -R
.:
a  b  c  unknown.mp3

./a:
a3.mp3  c.mp3  disc 1  disc2  longer title2.mp3  longer title3.mp3  long title.mp3  the title.mp3

./a/disc 1:
title1.mp3  title2.mp3

./a/disc2:
title1.mp3  title2.mp3

./b:
c.mp3  title1.mp3  title2.mp3  title3.mp3

./c:
c-pony2.mp4  pony3.mp3  pony4.mp3  pony.mp3

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

4
ответ дан 07.12.2019, 12:12

Я соединил программу Java командной строки, которая делает файлы переименования (и каталоги) бризом, специально для сценариев. Это свободно и с открытым исходным кодом, таким образом, можно изменить его к содержанию основы:

RenameWand
http://renamewand.sourceforge.net/

Некоторые соответствующие примеры использования:

Переместите файлы формы "<a> - <b>" к их соответствующему каталогу "<a>":

java -jar RenameWand.jar  "<a> - <b>"  "<a>/<b>"

Файлы вида к измененному в последний раз времени, и переименовывают их с 3-разрядным числом:

java -jar RenameWand.jar  "<a>"  "<3|#FT> <a>"

Части перестроения имени файла и случай изменения:

java -jar RenameWand.jar  "<album> - <artist> - <song>.<ext>" 
                          "<artist.upper> <album.title> - <song>.<ext.lower>"
1
ответ дан 07.12.2019, 12:12

Поскольку Пингвин направляется, это легко сделано в сценарии AWK или сценарии оболочки. Для нас простые смертные Вы могли бы хотеть судить Полуночного Командующего. Это находится на большинстве дистрибутивов Linux от мГц типа приглашения оболочки-a. Можно переименовать файлы с помощью регулярных выражений. Я использовал статью в GeekStuff http://www.thegeekstuff.com/2009/06/how-to-rename-files-in-group/ для помощи мне.

0
ответ дан 07.12.2019, 12:12

Используйте vidir и затем используйте Ваши функции редактора для применения шаблона переименования.

Имя:

vidir - каталог редактирования

РЕЗЮМЕ

vidir [-подробный] [directory|file |-]...

ОПИСАНИЕ

vidir позволяет редактировать содержания каталога в текстовом редакторе. Если никакой каталог не указан, текущий каталог редактируется.

При редактировании каталога каждый объект в каталоге появится на его собственной пронумерованной строке. Эти числа - то, как vidir отслеживает то, какие объекты изменяются. Удалите строки, чтобы удалить файлы из каталога или отредактировать имена файлов для переименования файлов. Можно также переключить пар чисел для свопинга имен файлов.

Обратите внимание, что, если "-" указан как каталог для редактирования, он читает список имен файлов от stdin и отображает имена файлов для редактирования. С другой стороны, список файлов может быть указан на командной строке.

ПРИМЕРЫ

vidir vidir *.jpeg Типичное использование.

найдите | vidir - содержание подкаталога Редактирования также. Для удаления подкаталогов удалите все их содержание и сам подкаталог в редакторе.

найдите - тип f | vidir - Редактирование все файлы под текущим каталогом и подкаталогами.

АВТОР

Joey Hess 2006-2010

Модификации Magnus Woldrich 2011

АВТОРСКОЕ ПРАВО

Copyright 2006-2011 vidir "АВТОРА" s, как упомянуто выше.

Лицензируемый под GPL GNU.

0
ответ дан 07.12.2019, 12:12

zmv zsh переименование инструмента очень хорош.

# zmv "programmable rename"
# Replace spaces in filenames with a underline
zmv '* *' '$f:gs/ /_'
# Change the suffix from *.sh to *.pl
zmv -W '*.sh' '*.pl'
# lowercase/uppercase all files/directories
$ zmv '(*)' '${(L)1}' # lowercase
$ zmv '(*)' '${(U)1}' # uppercase

Больше примечаний здесь...

1
ответ дан 07.12.2019, 12:12

Теги

Похожие вопросы