LINUX.ORG.RU

Вопрос по find -name -exec

 , ,


0

1

Доброго времени.

Конвертирую директорию, содержащую файлы с расширением flac в mp3, используя ffmpeg:

find . -name "*.flac" -exec ffmpeg -i {} -ab 320k -map_metadata 0 -id3v2_version 3 {}.mp3 \;

Теперь в папке лежат файлы с расширением ".flac" и ".flac.mp3". Как оставить только ".flac" и ".mp3" (без ".flac.mp3")? Спасибо.



Последнее исправление: dncaps (всего исправлений: 1)

Ответ на: комментарий от KennyMinigun

Ибо мой код для bash, обычный Bourne Shell (sh) его не съест.

Ну можно же короткие скрипты и сразу писать без bash-измов.

#!/bin/ash

DIR='.'


flac2mp3() {
  local file
  while read file; do
        ffmpeg -i "$file" -ab 320k -map_metadata 0 -id3v2_version 3 "${file%%.flac}.mp3"
  done
}


find "$DIR" -name "*.flac" -type f -maxdepth 1 | flac2mp3
vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 2)
Ответ на: комментарий от vodz

Ну можно же короткие скрипты и сразу писать без bash-измов.

Вообще да, но редко бывает что баша на целевой системе нет. Особенно в вопросе как в топике. А с башизмами код проще и короче.

${file%%.flac}

Тоже башизм ЕМНИП.

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

Я говорю, что ты неправильно запускаешь:

$ sh flac2mp3.sh
...
flac2mp3.sh: line 8: `  done < <(find "$dir" -name "*.flac" -type f -maxdepth 1)'

Вот тебе твой Bourne Shell (sh) сказал, что «звиняй, но синтаксис не умею такой». А все потому, что надо было запускать как я написал*:

# запускаeм bash (если вдруг у тебя какой-то другой шелл сейчас)
# т.е. опционально, если уже запущен bash
$ exec bash

# "исполняем" скрипт в текущем сеансe bash, чтоб обьявить функцию
$ source flac2mp3.sh

# вызываем обьявленную фунцию сколько угодно и где угодно
# передаем целевую директорию как первый аргумент
$ flac2mp3 "~/Idenline 2012 TBI 01"

# или для выполнения в текущей директории
$ flac2mp3 .

* приметка: в коде выше символ $ используется для обозначения коммандного приглашения, копировать его в терминал не надо

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 3)
Ответ на: комментарий от KennyMinigun

А с башизмами код проще и короче.

Но дан же пример, примерно один в один. :)

${file%%.flac}

Тоже башизм ЕМНИП.

Ну в г*-мамонтов этого нет, но в том, что развивается последние лет 20 - есть, например в ash.

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

Ну в г*-мамонтов этого нет, но в том, что развивается последние лет 20 - есть, например в ash.

Интересно, не знал.

Но в любом случае, проще следить что умеет bash, чем стайня не таких популярных шеллов. Ну или писать на чистом говне мамонта Bourne Shell (aka POSIX Shell).

Даже с Bash есть проблемы: на проприетарных платформах часто из коробки только bash версии 3 (из-за лицензии).

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от SEInterix

Выше дал команду как переименовать файлы, но нет мы не ищем легких путей и напишем свой велосипед

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