Terminé buscando este tipo de preguntas ya que necesitaba mirar el nivel superior de mi disco duro de música para identificar cuáles eran alac
para poder convertirlos a m4a(aac) comprimido para mejorar las capacidades de las plataformas.
Escribí una función que busca recursivamente en la carpeta actual ( es decir, si necesita ir más allá del directorio de trabajo en el que lo ejecutó )
si necesita cambiar la profundidad, el -maxdepth
puede añadirse a la opción find
comando en $m4a_files
así como especificar rutas para no buscar, como he hecho con ! -path "*.app*"
.
Utilicé echo
para imprimir el comando en una variable y ejecutarlo mediante eval
porque tuve problemas aquí y en el pasado con otras herramientas de línea de comandos ( como qpdf
) iterando la salida de find
en otra herramienta a través de un bucle for.
allu () {
# alac lookup
echo
echo "looking up m4a files"
echo
# bypasses paths with .app in their name so if you run it on some place like ~/Downloads
# and you have an app downloaded there it won't look in it
m4a_files=$( echo $( find . -name "*.m4a" ! -path "*.app*" | sed "s|.*|\"&\"|" ) );
# syntax afinfo $m4a_files |grep -B 4 m4a |grep File: |sed 's/.*\///'
echo 'checking for alac'
echo
# looks alac files up
file_lookup_merger=$( echo "afinfo" $m4a_files "|grep -B 4 alac |grep File: |sed 's/.m4a*\///'" ) ;
# uses eval to return the list of files it found *with srnd. quotes*
eval $file_lookup_merger |sed 's/File: //'| sed "s|.*|\"&\"|";
}
Edición: Un día después de escribir lo anterior, quise escribir una versión más simple y compatible que funcionara tanto en Mac como en Linux, así que escribí una usando Exiftool de Phillip Harvey. https://exiftool.org/ ( instalación homebrew ) https://formulae.brew.sh/formula/exiftool#default
# finds alac files
( find . -name *.m4a -exec exiftool -T -audioformat -filepath {} \; )|grep alac
# prints list of alac files for use as a string separated by spaces
echo $( ( find . -name *.m4a -exec exiftool -T -audioformat -filepath {} \; )|grep alac |sed 's.alac..g'|sed "s|.*|\"&\"|")|sed 's." /."/.g'