Как я могу рекурсивно проверить папки с файлами flac на наличие повреждений?

Что-то вызвало повреждение некоторых из моих файлов flac, и чтобы узнать, какие из них мне нужно перезаписать, я бы хотел получить список, содержащий только поврежденные файлы.

Как мне сделать это сейчас: Откройте терминал в каталоге и введите: $ flac -t * .flac

Вывод хороших файлов выглядит примерно так:

Song1.flac: ok
Song2.flac: ok

На некоторых моих старых рипах я получаю предупреждения, но песня вроде бы в порядке:

Song3.flac: WARNING, cannot check MD5 signature since it was unset in the STREAMINFO
Song3.flac: ok 

Но когда возникает ошибка, сообщения выглядят примерно так:

Song4.flac: testing, 73% complete
Song4.flac: ERROR while decoding data
             state = FLAC__STREAM_DECODER_END_OF_STREAM
Song5.flac: ERROR while decoding data
            state = FLAC__STREAM_DECODER_READ_FRAME
Song6.flac: ERROR, MD5 signature mismatch                                          
Song7.flac: *** Got error code 3:FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM
Song7.flac: *** Got error code 0:FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC

Song7.flac: ERROR while decoding data
            state = FLAC__STREAM_DECODER_READ_FRAME

The FLAC stream may have been created by a more advanced encoder.  Try
  metaflac --show-vendor-tag Song7.flac
If the version number is greater than 1.2.1, this decoder is probably
not able to decode the file.  If the version number is not, the file
may be corrupted, or you may have found a bug.  In this case please
submit a bug report to
    http://sourceforge.net/bugs/?func=addbug&group_id=13478
Make sure to use the "Monitor" feature to monitor the bug status.

Мой вопрос is:

  • Как я могу отфильтровать вывод, чтобы показать только файлы с предупреждениями (вывод содержит WARNING) или ошибками (вывод содержит ERROR)?

Я думаю, что это может быть выполнимо с помощью grep, но я не знаю, как передать вывод команды flac -t в grep. С flac -c

  • И если это сработает, как я могу проверить все подкаталоги одновременно?

Моя музыкальная коллекция отсортирована по многим подкаталогам и собирается в каждом каталоге и выполнить команду было бы кропотливо.

Бонусные баллы, если он может вывести путь к поврежденному файлу, а не только имя:)

2
задан 23 July 2012 в 22:01

1 ответ

Используя globstar от bash 4, он рекурсивно найдет все файлы flac из текущего каталога и выведет код ошибки и имя файла для файлов с ошибками и предупреждениями.

#!/usr/bin/env bash
shopt -s globstar

for file in ./**/*.flac; do
    flac -wst "$file" 2>/dev/null || printf '%3d %s\n' "$?" "$file"
done

Руководство не документирует, с какими кодами ошибок оно выходит для различных типов ошибок, поэтому я добавил код ошибки в вывод, возможно, вы можете увидеть шаблон из него.

0
ответ дан 23 July 2012 в 22:01

Другие вопросы по тегам:

Похожие вопросы: