Sto utilizzando il programma tag ( link ) per copiare i tag dalle immagini in una directory alle immagini con lo stesso nome in un'altra directory.
Un comando che funziona dalla riga di comando è questo:
tag -s "Bass,CR Window,DrumKit,GaryHusband,Guitar,JohnMcLaughlin,Keys" /Users/michael/Dropbox/EOS5Diii/CF/./106EOS5D/2PBO1509.JPG
Un comando che fallisce è questo:
find . -name 2PBO1509.JPG -a -exec sh -c 'tag -s \"'tag -lN "$1"'\" ~/Dropbox/EOS5Diii/CF/"$1"; if [ $? -ne 0 ]; then echo $1; fi' x {} \;
Fallisce con questo messaggio / output:
tag: The operation couldn’t be completed. (OSStatus error -43.)
./106EOS5D/2PBO1509.JPG
Ciò che è strano per me è (1) lo script di ricerca (quando si utilizza il modello * .JPG) funziona per migliaia di file nella struttura della directory. Ma fallisce a dozzine. Quando cambio lo script semplicemente echo il comando che sto cercando di eseguire (usando il nome del file che non funziona, all'interno della stringa sh -c principale), ottengo un elogio che, quando copiato e incollato nella finestra del terminale, riesce senza errori .
AGGIORNAMENTO: Ho trovato che quando echo la stringa normalmente passata a sh -c, trovo che ho effettivamente le virgolette rovesciate (\ ") invece delle virgolette normali ("). Quindi ho modificato la stringa di script per utilizzare le virgolette più semplici (nessuno dei miei nomi di file ha spazi in esse) e ora gli errori vengono risolti.
Ciò che mi confonde è il motivo per cui questo a volte fallisce piuttosto che fallire sempre. Pensieri?