6 votos

Cómo escapar correctamente los espacios en los resultados de mdfind para utilizarlos en un bucle for

Tratando de responder a la pregunta ¿Son posibles las verdaderas carpetas dinámicas (NO una "Smart Folder" SavedSearch)? Me tropecé con el problema de poner en bucle los resultados de una búsqueda mdfind como rutas citadas o escapadas.

Fragmento de código:

for File in $(mdfind -onlyin $MusicSamples 'kMDItemAudioBitRate >= "44000"  && _kMDItemUserTags = "Sample"')
do
    ln -s $File $DrumFoldr
done

El para debería crear enlaces blandos de todos los archivos coincidentes en la carpeta $MusicSamples o sus subcarpetas en la carpeta $DrumFoldr. El bucle funciona para archivos con rutas/nombres de archivo sin espacios.

  • La respuesta a un similar simplemente sugiere citar $File ( ... "$File" ... ). Esto no funciona - simplemente crea enlaces blandos rotos con nombres de las cadenas contiguas en el nombre del archivo original: un archivo llamado "1. Artista - Canción - Mezcla.mp3" creará cuatro o cinco enlaces blandos: "1.", "Artista", "Canción", "Mix.mp3" y "-".

  • Escapando los espacios mediante la canalización de los resultados de mdfind a un comando sed sustituyendo un espacio por un espacio escapado dará como resultado algo así como "\ 1.", "\ 1. Artista", etc.

  • Creación de una matriz de los resultados de mdfind con:

    result=()
    mdfind ... | while IFS= read -r filename; do
      result+=("$filename")
    done

    y usarlo en for File in "${result[@]}"; do ln -s "$File" $DrumFoldr; done tampoco funciona.

¿Cómo escapo correctamente de esos espacios en las rutas?

0voto

nous Puntos 1

Acabo de resolver un problema similar al intentar iterar sobre los resultados de mdfind de una búsqueda de imágenes.

counter=0
mdfind image -onlyin $1 | while read line; do 
    ((counter = counter + 1))
    echo "$counter: $line"
done
exit

Así que adaptando eso a tu problema, esto debería funcionar:

mdfind -onlyin $MusicSamples 'kMDItemAudioBitRate >= "44000" && _kMDItemUserTags = "Sample"' | while read File
do
    ln -s $File $DrumFoldr
done

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X