Puedo enumerar archivos de audio con la ruta completa: (usando '-onlyin' para realizar pruebas)
$ mdfind -0 -onlyin ~/Music kind:audio | xargs -0 -n 1
/Users/rrasch/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/1998-04-29_OB07264seg6of6_Z86.wav
/Users/rrasch/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/1998-04-29_OB07264seg4of6_Z86.wav
/Users/rrasch/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/1998-04-29_OB07264seg1of6_Z86.wav
/Users/rrasch/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/1993-11-04_illiteracy_laura_jaeger_jim_latemer_2448.wav
También puedo obtener la profundidad de bits y la frecuencia de muestreo ejecutando mdls como argumento en xargs:
$ mdfind -0 -onlyin ~/Music kind:audio | xargs -0 mdls -name kMDItemAudioSampleRate -name kMDItemBitsPerSample -raw | xargs -0 -n 2
44100 24
44100 24
44100 24
48000 24
Si agrego kMDItemFSName al mdls puedo obtener el nombre del archivo junto con la profundidad de bits y la frecuencia de muestreo, pero pierdo la ruta:
$ mdfind -0 -onlyin ~/Music kind:audio | xargs -0 mdls -name kMDItemAudioSampleRate -name kMDItemBitsPerSample -name kMDItemFSName -raw | xargs -0 -n 3
44100 24 1998-04-29_OB07264seg6of6_Z86.wav
44100 24 1998-04-29_OB07264seg4of6_Z86.wav
44100 24 1998-04-29_OB07264seg1of6_Z86.wav
48000 24 1993-11-04_illiteracy_laura_jaeger_jim_latemer_2448.wav
Quiero buscar audio en varios directorios (omitiré '-onlyin' cuando lo implemente). ¿Cómo enumero la ruta completa con profundidad de bits y frecuencia de muestreo... así?
44100 24 /Users/rrasch/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/1998-04-29_OB07264seg6of6_Z86.wav
44100 24 /Users/rrasch/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/1998-04-29_OB07264seg4of6_Z86.wav
44100 24 /Users/rrasch/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/1998-04-29_OB07264seg1of6_Z86.wav
48000 24 /Users/rrasch/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/1993-11-04_illiteracy_laura_jaeger_jim_latemer_2448.wav
Respuesta1
Utilicé gfind (brew install findutils) para lograr algo similar a lo anterior:
$ gfind /tmp/temp -iname "*.mp4" -printf '\n' -exec ls {} \; -exec mdls -name kMDItemAudioSampleRate -name kMDItemBitsPerSample -raw {} \; | xargs -0 -n 2
/tmp/temp/a.mp4
(null) (null)
/tmp/temp/b.mp4
(null)
(null)
/tmp/temp/c.mp4
(null) (null)
/tmp/temp/d.mp4
(null)
(null)
Respuesta2
Llame a un breve script en línea desde xargs
:
mdfind -0 -onlyin ~/Music kind:audio | xargs -0 sh -c '
for pathname do
printf "%s %s %s\n" \
"$( mdls -name kMDItemAudioSampleRate -raw "$pathname" )" \
"$( mdls -name kMDItemBitsPerSample -raw "$pathname" )" \
"$pathname"
done' sh
El bucle recibe lotes de nombres de rutas encontrados desde mdfind
. Para cada nombre de ruta, mdls
se utiliza para extraer los dos atributos que le interesan, y los valores de estos se imprimen junto con el nombre de ruta mismo usando printf
.
O intente usar el kMDItemPath
atributo, que le permitiría llamar mdls
solo una vez por nombre de ruta:
mdfind -0 -onlyin ~/Music kind:audio | xargs -0 sh -c '
for pathname do
mdls -name kMDItemAudioSampleRate \
-name kMDItemBitsPerSample \
-name kMDItemPath \
-raw "$pathname" | tr "\0" " "
echo
done' sh