LINUX.ORG.RU

Помогите разобраться с find.


0

0

Есть фонотека с определенной структурой, например:

moon% tree
.
|-- Другие Берега
|   |-- 01 Комната (Вступление).mp4
|   |-- 02 Другие Берега.mp4
|   |-- 03 Муза.mp4
|   |-- 04 Февраль.mp4
|   |-- 05 Живем Дальше.mp4
|   |-- 06 Южные Сны.mp4
|   |-- 07 Черный Ветер.mp4
|   |-- 08 Исповедь.mp4
|   |-- 09 Читай По Губам.mp4
|   |-- 10 Моно.mp4
|   |-- 11 Дети Неба.mp4
|   |-- 12 Отец.mp4
|   |-- 13 Грязные Раны.mp4
|   |-- 14 Орион 122.mp4
|   `-- Cover.png
`-- Фаталист
    |-- 01 Полкан.mp4
    |-- 02 Монами.mp4
    |-- 03 Навсегда.mp4
    |-- 04 Безразличие.mp4
    |-- 05 В Точку.mp4
    |-- 06 Голос.mp4
    |-- 07 Дневники.mp4
    |-- 08 Рай.mp4
    |-- 09 Проекция.mp4
    |-- 10 Летя На Огонь.mp4
    |-- 11 На Безлюдной Войне.mp4
    |-- 12 Остановка.mp4
    |-- 13 Пепел.mp4
    |-- 14 Расстояние.mp4
    |-- 15 Неосторожно.mp4
    `-- Cover.png

2 directories, 31 files
moon%

Дерево каталогов довольно ветвистое, нужно автоматизировать процесс. Нужно проити по файлам с расширением ".mp4" програмой AtomicParsley со нижеприведенными параметрами.

AtomicParsley "01 Полкан.mp4" --artwork REMOVE_ALL --artwork Cover.png --encodingTool "Nero AAC"
AtomicParsley "02 Монами.mp4" --artwork REMOVE_ALL --artwork Cover.png --encodingTool "Nero AAC"

После обработки AtomicParsley создает новые файлы с измененым содержимым с -temp-***** в названии.

01 Полкан-temp-70238.mp4
02 Монами-temp-25109.mp4

Необходимо удалить все файлы ".mp4", в котором нет temp, включая файлы ".png" Необходимо переименовать все файлы из "01 Полкан-temp-70238.mp4" в "01 Полкан.mp4". То есть убрать -temp-***** в названии каждого файла.

Спасибо за помощь, друзья.
anonymous

Перво-наперво сделай тестовый каталог, в который скопируй небольшую часть дерева каталогов. Потом только на него натравливай то, что напишу ниже (ибо я сам не проверял, писал "на коленке" ;) ). Если всё будет отрабатывать как надо, то можно и на реальные файлы натравить... впрочем, подстраховка в виде полного бэкапа не помешает...

$ find /path/to/files -type f ! -name '*-temp-*.mp4' -exec rm -f {} \;
$ find /path/to/files -type f -name '*.mp4' -exec /bin/sh -c 'flnm=$(echo {}|sed -r "s@(.*)\-test\-\d+(\.mp4)$@\1\2@"); mv -f {} $flnm' \;

Slavaz ★★★★★
()
Ответ на: комментарий от anonymous

Блин, я так пыхтел, а тут на тебе - разобралси... :)

Молодец, что ту сказать - не каждый может решать поставленные самим собой задачи (не каждый ещё умеет ставить сам себе задачи ;) )

Решение покажи для сравнения.

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

moon% find . -type f -name '*.mp4' -exec /bin/sh -c 'flnm=$(echo {}|sed -r "s@(.*)\-test\-\d+(\.mp4)$@\1\2@"); mv -f {} $flnm' \;
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Войне-temp-82490.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Огонь-temp-82490.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/04': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/15': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/14': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/12': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/03': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/07': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/09': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Точку-temp-82490.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/01': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/02': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/06': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/13': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно выполнить stat для `./Фаталист/08': No such file or directory
/bin/sh: Syntax error: "(" unexpected (expecting ")")
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Берега-temp-69670.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Муза-temp-69670.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Дальше-temp-69670.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Февраль-temp-69670.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Сны-temp-69670.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Ветер-temp-69670.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Губам-temp-69670.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Исповедь-temp-69670.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Моно-temp-69670.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Неба-temp-82490.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Отец-temp-82490.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `Раны-temp-82490.mp4' не является каталогом
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: указанная цель `122-temp-82490.mp4' не является каталогом
moon% 

С пробелами проблема?

anonymous
()
Ответ на: комментарий от anonymous

А так:
$ find /path/to/files -type f -name '*.mp4' -exec /bin/sh -c 'flnm=$(echo {}|sed -r -e "s@(.*)\-test\-\d+(\.mp4)$@\1\2@" -e "s@"\""@\\\\"\""@"); mv -f "{}" "$flnm"' \;

?

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

moon% tree
.
|-- Другие Берега
|   |-- 01 Комната (Вступление)-temp-69670.mp4
|   `-- 02 Другие Берега-temp-69670.mp4
`-- Фаталист
    |-- 01 Полкан-temp-82490.mp4
    `-- 02 Монами-temp-82490.mp4

2 directories, 4 files
moon% find . -type f -name '*.mp4' -exec /bin/sh -c 'flnm=$(echo {}|sed -r -e "s@(.*)\-test\-\d+(\.mp4)$@\1\2@" -e "s@"\""@\\\\"\""@"); mv -f "{}" "$flnm"' \;
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно переместить `./Фаталист/01 Полкан-temp-82490.mp4' в `': No such file or directory
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно переместить `./Фаталист/02 Монами-temp-82490.mp4' в `': No such file or directory
/bin/sh: Syntax error: "(" unexpected (expecting ")")
sed: -e выражение #1, символ 29: незавершенная команда `s'
mv: невозможно переместить `./Другие Берега/02 Другие Берега-temp-69670.mp4' в `': No such file or directory
moon%

Я самостоятельно сократил содержимое директорий до двух файлов. Скобки в файле "01 Комната (Вступление)-temp-69670.mp4" я так понимаю не обрабатываются?

anonymous
()
Ответ на: комментарий от anonymous

find ./ -type f -name '*.mp4' -exec /bin/sh -c 'flnm=$(echo "{}"|sed -r -e "s@\-temp\-[0-9]*(\.mp4)\$@\1@" -e "s@"\""@\\\\"\""g@"); mv -f "{}" "$flnm"' \;

Не отработаются двойные кавычки в имени, остальное должно по идее...

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

можно было find | perl " ... rename(...)", там бы с кавычками проблем не было бы (только с \n). Да и код гораздо короче твоего.

alexsaa
()
Ответ на: комментарий от alexsaa

Да, верно, про перл я как-то и не вспомнил... Бывает.

P.S. Зато гланды вырваны. ;)

Slavaz ★★★★★
()

find 'govnodir' -name "*.mp4" -exec AtomicParsley "{}" --artwork REMOVE_ALL --artwork Cover.png --encodingTool "Nero AAC" Остальное анонимус доставит.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.