Chcę zastosować informacje o odtwarzaniu do wszystkich plików MP3 w mojej kolekcji muzycznej. Aby to zrobić, używam narzędzia o nazwie mp3gain (w systemie Linux).
Aby poprawnie zastosować wzmocnienie albumu, muszę uruchomić polecenie mp3gain dla poszczególnych katalogów. Innymi słowy, muszę znaleźć katalog, uruchomić mp3gain na wszystkich plikach w tym katalogu, a następnie powtórzyć dla każdego innego katalogu. Do tej pory wymyśliłem:
find . -type d -exec mp3gain {}/*.mp3 \;
Dane wyjściowe wyglądają tak (pokazuje tylko kilka z wielu katalogów):
[...]
./dev2/Physicist/*.mp3
Can't open ./dev2/Physicist/*.mp3 for reading
./Real Things/*.mp3
Can't open ./Real Things/*.mp3 for reading
Wydaje mi się, że „ *
” ucieka, więc zamiast szukać wszystkich plików z rozszerzeniem „.mp3”, szuka pliku o nazwie „ *
.mp3”.
Jakiego polecenia powinienem użyć?
Odpowiedzi:
Wygląda na to, że nie globuje poprawnie. Co powiesz na coś takiego:
jako jedno polecenie:
źródło
export
tych zmiennych (zakładając, że bash jest powłoką), ale poza tym wygląda to dobrze.IFS=$'\n\b'
To może nie wyglądać ładnie, ale to polecenie znajdzie wszystkie katalogi zawierające pliki mp3 zapisuje je w pliku tymczasowym, a następnie przegląda ten plik tymczasowy, wyświetlając zawartość każdego katalogu. Jeśli jesteś zadowolony z Output, możesz iść dalej i podłączyć do niego polecenie mp3gain zamiast ls.
Ustawienie zmiennej IFS na znak nowego wiersza jest ważne, aby można było pracować z plikami i katalogami zawierającymi spacje.
Powodem, dla którego wybrałem listę katalogów zawierających najpierw mp3, jest przypadek, gdy mp3gain zgłasza błąd przy napotkaniu pustych zestawów plików. W ten sposób nigdy nie napotyka takiej sytuacji.
źródło
Możesz użyć Rebola, działa na systemach Unix i Windows
Jak zastosować funkcję rekurencyjnie do wszystkich plików w katalogu
http://reboltutorial.com/blog/how-to-apply-a-function-to-all-files-in-a-directory-recursively/
źródło