Come correttamente esca pe spazi nei res ults di mdfind per usarli in un ciclo for

2

Cercando di rispondere alla domanda Sono veri cartelle dinamiche (NON una "Smart Folder" SavedSearch) possibile? Mi sono imbattuto nel problema del loop dei risultati di una ricerca mdfind come percorsi quotati o di escape.

Frammento di codice:

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

Il ciclo per dovrebbe creare collegamenti software di tutti i file corrispondenti nella cartella $ MusicSamples o nelle relative sottocartelle nella cartella $ DrumFoldr. Il ciclo funziona per file con percorsi / nomi di file senza spazi.

  • La risposta a simile question suggerisce semplicemente di citare $ File ( ... "$File" ... ). Questo non funziona: crea semplicemente collegamenti software non funzionanti con i nomi delle stringhe contigue nel nome del file originale: un file chiamato "1. Artist - Song - Mix.mp3" creerà quattro o cinque collegamenti software: "1." , "Artista", "Canzone", "Mix.mp3" e "-".

  • Sfuggire gli spazi collegando i risultati di mdfind a un comando sed che sostituisce uno spazio con uno spazio di escape avrà come risultato "\ 1.", "\ Artist" ecc.

  • Creazione di un array dei risultati mdfind con:

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

    e il suo utilizzo in for File in "${result[@]}"; do ln -s "$File" $DrumFoldr; done non funziona neanche.

Come faccio a fugare correttamente quegli spazi nei percorsi?

    
posta klanomath 17.04.2017 - 21:42
fonte

0 risposte

Leggi altre domande sui tag