2

Я хочу применить информацию о воспроизведении ко всем файлам MP3 в моей музыкальной коллекции. Для этого я использую инструмент под названием mp3gain (в Linux).

Чтобы правильно применить усиление альбома, мне нужно запустить команду mp3gain для каждого каталога. Другими словами, мне нужно найти каталог, запустить mp3gain для всех файлов в этом каталоге, а затем повторить для всех остальных каталогов. До сих пор я придумал это:

 find . -type d -exec mp3gain {}/*.mp3 \;

Вывод выглядит следующим образом (показывает только несколько каталогов):

[...]
./dev2/Physicist/*.mp3
Can't open ./dev2/Physicist/*.mp3 for reading
./Real Things/*.mp3
Can't open ./Real Things/*.mp3 for reading

Мне кажется, что « * » экранируется, поэтому вместо поиска всех файлов, заканчивающихся на «.mp3», он ищет файл с именем « * .mp3».

Какую команду я должен использовать?

3 ответа3

7

Похоже, что он не сгущается должным образом. Как насчет чего-то вроде этого:

#!/bin/bash
OLDIFS=$IFS
IFS=$(echo -en "\n\b")
for dir in $(find . -type d)
do
        mp3gain $dir/*
done
IFS=$OLDIFS

как одна команда:

OLDIFS=$IFS;IFS=$(echo -en "\n\b");for dir in $(find . -type d);do mp3gain $dir/*;done;IFS=$OLDIFS
1

Это может выглядеть не очень хорошо, но эта команда найдет все каталоги, которые содержат mp3-файлы, запишет их в временный файл и затем пройдет через этот временный файл со списком содержимого каждого каталога. Если вы довольны выводом, вы можете пойти дальше и подключить к нему команду mp3gain вместо ls.

Установка переменной IFS для символа новой строки важна, чтобы вы могли работать с файлами и каталогами, которые содержат пробелы.

Причина, по которой я решил сначала перечислить каталоги, содержащие mp3-файлы, заключается в том, что mp3gain выдает ошибку при обнаружении пустых наборов файлов. Таким образом, он никогда не сталкивается с такой ситуацией.

IFS=$'\n'; for i in `find -type f -iname *.mp3`; do dirname $i ; done | sort | uniq > ~/mp3directories.txt && for i in `cat ~/mp3directories.txt`; do ls -1 $i/*.mp3 ; echo ; done
-1

Вы можете использовать Rebol, он работает на Unix и Windows

Как применить функцию ко всем файлам в каталоге рекурсивно

http://reboltutorial.com/blog/how-to-apply-a-function-to-all-files-in-a-directory-recursively/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .