OSX find non ha -printfazione . L' +: command not founderrore è perché il tuo comando è racchiuso tra i segni di spunta (`` ), so the shell is treating the results of thetrova command as a command and attempting to execute them, specifically it is trying to execute+ `che è la prima cosa stampata dal comando che hai eseguito. Otterrai lo stesso errore se esegui
`echo -n "+"`
I segni di spunta posteriori vengono utilizzati per salvare i risultati di un comando in una variabile, quindi quanto sopra dà un errore ma questo non:
foo=`echo -n "+"`
Non dici quale sia l'output desiderato. Sulla base della tua domanda, presumo che tu voglia ottenere un elenco di tutte le cartelle in una determinata directory che iniziano con a .e stampano i loro nomi sulla stessa riga, tra virgolette e precedute da a +. In tal caso, puoi fare qualcosa del genere:
find ~/.mail/fastmail -maxdepth 1 -type d -name ".*" -exec echo -n "+'{}' " \;
Uscita campione:
+'/home/terdon/.mail/fastmail/.bar' +'/home/terdon/.mail/fastmail/.foo'
Per passare l'output di questo comando come input a un altro programma ( mailboxad esempio), procedere come segue:
mailbox `find ~/.mail/fastmail -maxdepth 1 -type d -name ".*" -exec echo -n "+'{}' " \;`
o
mailbox $(find ~/.mail/fastmail -maxdepth 1 -type d -name ".*" -exec echo -n "+'{}' " \;)
In risposta al commento di OP:
Se vuoi solo tutte le cartelle, non è necessario -name, per rimuovere le virgolette, semplicemente non citare {}. Supporrò anche che non desideri la cartella principale ( fastmail), quindi -mindpeth 1:
find ~/.mail/fastmail -maxdepth 1 -mindepth 1 -type d -exec echo -n "+{} " \;
La rimozione del percorso è leggermente più complessa perché, contrariamente a quanto ci si potrebbe aspettare , non è possibile utilizzare solo basenamenella -execchiamata. Devi essere creativo, ecco alcune opzioni:
Analizza con awk
mailbox `find ~/.mail/fastmail -maxdepth 1 -mindepth 1 -type d |
awk -F"/" '{printf "+%s ",$NF}'`
-F"/"dice awkdi usare /come delimitatore di campo e quindi stampare +seguito dall'ultimo campo ( $NF) che sarà il nome della cartella.
Usa un forciclo (supponendo che i nomi delle tue cartelle non abbiano caratteri o spazi strani)
mailbox `for dir in $(
find ~/.mail/fastmail -maxdepth 1 -mindepth 1 -type d
); do echo -n "+$(basename $dir) "; done`
Se i nomi delle tue cartelle contengono spazi o caratteri strani, usa invece questo:
mailbox `find ~/.mail/fastmail -maxdepth 1 -mindepth 1 -type d |
while IFS= read -r dir; do echo -n "+$(basename $dir) "; done`