Come eseguire correttamente gli spazi nei risultati di mdfind per usarli in un ciclo for


2

Cercare di rispondere alla domanda Sono possibili cartelle dinamiche vere (NON una SavedSearch "Smart Folder")? Mi sono imbattuto nel problema di ripetere i risultati di una ricerca mdfind come percorsi citati o sfuggiti.

Snippet di codice:

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

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

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

  • L'escape degli spazi tramite il piping dei risultati mdfind a un comando sed che sostituisce uno spazio con uno spazio di escape genererà qualcosa come "\ 1.", "\ Artist" ecc.

  • Creazione di una matrice dei risultati mdfind con:

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

    e usarlo for File in "${result[@]}"; do ln -s "$File" $DrumFoldr; donenon funziona neanche.

Come posso sfuggire correttamente a quegli spazi nei percorsi?


mdfindha un'opzione nulla. È quindi possibile provare a eseguire il piping dei risultati xargs.
fd0

@ fd0 Ho provato anche questo (non l'ho menzionato nella mia domanda) - senza successo. Ma potrei aver commesso un errore nel comando.
klanomath,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.