J'ai trouvé une solution de contournement, bien que via un script PHP, puisque l'objectif final était d'intégrer les balises dans une base de données servie par un serveur web. Tout d'abord, listez tous les fichiers flac dans un fichier texte :
find /media/marcel/Archives2/Albums -type f -name '*flac' > flac_files.txt
En utilisant PHP, ouvrez le fichier en lecture, puis obtenez une poignée de base de données et préparez une instruction PDO pour écrire chaque nom de fichier :
$dbh = new PDO(, , , );
$qry = "INSERT INTO temp (filename) VALUES (?)";
$stmt = $dbh->prepare($qry);
$flac = fopen('/media/marcel/Archives2/Albums/flac_files.txt', "r");
Parcourez maintenant chaque ligne de flac_files.txt, écrivez le nom de fichier dans la base de données en utilisant la requête préparée, obtenez les valeurs des balises dans un tableau à partir d'une commande metaflac shell et écrivez chacune à tour de rôle dans la base de données :
while (!feof($flac)) {
$filename = rtrim(fgets($flac));
$stmt = $dbh->bindParam(1, $filename);
$stmt->execute();
$tag_list = explode("\n", shell_exec('metaflac --export-tags-to=- "' . $filename . '"')) //explode on linefeed character;
$c = count($tag_list);
for ($i = 0 ; $i < $c ; $i++) {
$tag = explode('=', $tag_list[$i]);
if ($tag[0]) { // no empty tags!
$rec = "UPDATE albums.temp SET " . $tag[0] . " = '" . str_replace("'", "’", $tag[1]) . "' WHERE filename = '" . $filename . "'"; //no quotes, just real apostrophes
$data = $dbh->query($rec);
}
}
}
Rapide et sale, mais ça fonctionne. Bien sûr, vous devrez configurer la table temp avec les balises appropriées comme noms de colonnes à l'avance. Alternativement, vous pourriez écrire chaque nom de fichier dans un deuxième fichier, suivi des balises récupérées à partir d'une commande metaflac, puis terminer chacun avec un délimiteur, disons "@" sur sa propre ligne. Aussi fastidieux, mais aussi fonctionne.