2013-11-11 4 views
3

Я хочу иметь команду или скрипт, который будет выполнять тестовую функцию flac во всех файлах flac в папке и ее подпапках. (Т.е. $ FLAC -t music_file.flac)Рекурсивно протестировать все файлы flac в папке

Я попытался с помощью

find . -name "*.flac" -exec flac -t '{}' \; 

и она работает, однако функция тестирования FLAC также записывает вывод авторских прав/гарантии перед тестированием каждого файла, что затрудняет чтобы четко видеть результат «ok».

Я также попытался с помощью

for file in 'ls *.flac' 
do 
    flac -t $file 
done 

, который работает гораздо аккуратнее (только пишет о гарантии/об авторских правах когда-то изначально), но не рекурсивно действовать на вложенные папки.

Могу ли я просить некоторую помощь в улучшении этого?

ответ

0

Я не уверен, если это самое элегантное решение, но вы можете использовать свою оригинальную команду с Grep, чтобы исключить биты вы не хотите. Так что если вы хотите, список файлов, которые были проверены вместе со статусом, вы можете искать:

find -name "*.flac" -exec flac -t '{}' \; |& grep "\.flac" 

«&» является важным, так как кажется, FLAC выходы наиболее материал для STDERR.

+0

Это прекрасно справится с работой, теперь почему я не подумал об этом! – farmerdave

1

Вы можете пройти --silent/-s до flac, и он не будет включать информацию об авторских правах и т. Д., На выходе. Обратите внимание, однако, что он также ничего не покажет, когда файл равен ok, только вывод, если он не ok.

+0

Спасибо, это вариант, который я пробовал, но я надеюсь найти решение на полпути между молчанием и по умолчанию. – farmerdave

0
-R, --recursive list subdirectories recursively 

Вы можете попробовать это:

for file in 'ls -R *.flac' 
do 
    flac -t $file 
done 
+0

flac: непризнанная опция '--recursive '- это результат -R – farmerdave

+0

. Еще несколько об этом, с тех пор я узнал, что команда« ls »на самом деле не нужна, и она не действует как команда bash« ls », в этом случае. Цикл for уже перечисляет все файлы в каталоге, а команда отладки «эхо» внутри цикла показывает, что $ file равен «ls» на первой итерации. – farmerdave

Смежные вопросы