Quelque chose a causé d'endommager certains de mes fichiers flac, et pour savoir lesquels j'ai besoin de ré-extraire, je voudrais obtenir une liste contenant uniquement les fichiers endommagés.
Comment je le fais maintenant: Ouvrez un terminal dans un répertoire et entrez: $ flac -t * .flac
La sortie de bons fichiers est quelque chose comme:
Song1.flac: ok
Song2.flac: ok
Sur certaines de mes vieilles déchirures, je reçois des avertissements, mais la chanson semble aller bien:
Song3.flac: WARNING, cannot check MD5 signature since it was unset in the STREAMINFO
Song3.flac: ok
Mais lorsqu'une erreur se produit, les messages ressemblent à:
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.
Ma question est:
Je pense que cela pourrait être faisable avec grep, mais je ne sais pas comment donner la sortie de la commande flac -t à grep. Avec flac -c
Ma collection de musique est triée en plusieurs sous-répertoires et aller dans chaque répertoire et exécuter la commande serait laborieux.
Points bonus s'il pouvait sortir le chemin du fichier corrompu, pas seulement le nom :)
En utilisant globstar de bash 4, cela trouvera récursivement tous les fichiers flac du répertoire courant, et affichera le code d'erreur et le nom de fichier pour ceux avec des erreurs et des avertissements.
#!/usr/bin/env bash
shopt -s globstar
for file in ./**/*.flac; do
flac -wst "$file" 2>/dev/null || printf '%3d %s\n' "$?" "$file"
done
Le manuel ne documente pas avec quels codes d'erreur il se termine pour différents types d'erreurs, j'ai donc ajouté le code d'erreur dans la sortie, peut-être pouvez-vous en voir un modèle.