LinuxForum.Fans
Тема

Групповое переименование файлов

Автор: cypherpunks01 10 сообщений 4228 просмотров
#240013

Добрый день!
Возникла задача массово переименовать несколько файлов. Для примера: есть "01 Маврин - Рождение.flac", требуется "01 - Рождение.flac".
rename, как оказалось, с UTF-8 не работает :(. Наткнулся на страницу http://diesel.pp.ua/?p=244. Попробовал воспользоваться следующим вариантом:

text
find . maxdepth 1 -type f | sed "p;s/Маврин //" | xargs -n2 mv

Наткнулся на то, что команда mv не разделяет правильно передаваемые аргументы из-за пробелов в имени файла. Как с этим поступить? И возможно ли как-то подружить rename с UTF-8?

#240014

как-то так:

text
find . maxdepth 1 -type f | while read FILE; do mv "$FILE" "${FILE/Маврин //}"; done
#240016
cypherpunks01 написал:
rename, как оказалось, с UTF-8 не работает

Вроде работает:
[console]sergey@Pent4-desktop:~$ touch 'абв гд.яя'
sergey@Pent4-desktop:~$ ls
абв гд.яя
sergey@Pent4-desktop:~$ rename 's/\.яя$//' *.яя
sergey@Pent4-desktop:~$ ls
абв гд
[/console]

#240020
-=Serj=- написал:
[quote=cypherpunks01]rename, как оказалось, с UTF-8 не работает

Вроде работает:
[console]sergey@Pent4-desktop:~$ touch 'абв гд.яя'
sergey@Pent4-desktop:~$ ls
абв гд.яя
sergey@Pent4-desktop:~$ rename 's/\.яя$//' *.яя
sergey@Pent4-desktop:~$ ls
абв гд
[/console][/quote]
ls
01 Маврин - Рождение.flac
rename 's/Маврин //' 01\ Маврин\ -\ Рождение.flac
ls
01 Маврин - Рождение.flac

#240023
Fat-Zer написал:
как-то так:
text
find . maxdepth 1 -type f | while read FILE; do mv "$FILE" "${FILE/Маврин //}"; done

О! А вот это уже помогло:

text
find . -maxdepth 1 -type f | while read FILE; do mv "$FILE" "${FILE/Маврин /}"; done

А можно подробнее про конструкцию "${FILE/Маврин /}"? Что это такое? Как называется? Вырезает из левой части то, что указано в правой, так?

#240025

[console]sergey@Pent4-desktop:~/sandbox$ ls
01 Маврин - Рождение.flac
sergey@Pent4-desktop:~/sandbox$ rename 's/Маврин //' *.flac
sergey@Pent4-desktop:~/sandbox$ ls
01 - Рождение.flac
[/console]

#240027
cypherpunks01 написал:
А можно подробнее про конструкцию "${FILE/Маврин /}"? Что это такое? Как называется? Вырезает из левой части то, что указано в правой, так?

почти так, ${переменная/шаблон/строка} - заменяет первое вхождение шаблона в переменной на строку.

man bash, раздел "Подстановка значений параметров".

#240303

Слушай, -=Serj=-, не знаю как ты это делаешь, но у меня это так и не заработало%)

Fat-Zer написал:

man bash, раздел "Подстановка значений параметров".

Ага, спасибо, прочитал. А насчёт FILE - это что-то связанное с перенаправлением? Я по перенаправлению и конвейерам комманд несколько статей просмотрел, пытаясь вспомнить, но так ничего и не попалось.

#240304
"cypherpunks01" написал:
Ага, спасибо, прочитал. А насчёт FILE - это что-то связанное с перенаправлением? Я по перенаправлению и конвейерам комманд несколько статей просмотрел, пытаясь вспомнить, но так ничего и не попалось.

man read - читает текст с stdin'а в переменную.

#240320

Блин :( Я осознал насколько сглупил...

Кстати я разобрался как переделать первый вариант, что бы xargs делил аргументы по переводу строки, а не по пробелам.
Было:

text
find . -maxdepth 1 -type f | sed "p;s/Маврин //" | xargs -n2 mv

А надо:

text
find . -maxdepth 1 -type f | sed "p;s/Маврин //" | xargs -d "\n" mv

Про аргументы и группы оказалось хорошо написано в статье "Просто о xargs".

Осталось понять почему у меня rename не работает...

Войдите или зарегистрируйтесь, чтобы ответить.