Voglio usare find
per trovare i file in un set di cartelle limitato da caratteri jolly, ma dove ci sono spazi nel nome del percorso.
Dalla riga di comando, questo è facile. I seguenti esempi funzionano tutti.
find te*/my\ files/more -print
find te*/'my files'/more -print
find te*/my' 'files/more -print
Questi troveranno i file in, per esempio, terminal/my files/more
e tepid/my files/more
.
Tuttavia, ho bisogno che questo faccia parte di una sceneggiatura; quello di cui ho bisogno è qualcosa del genere:
SEARCH='te*/my\ files/more'
find ${SEARCH} -print
Sfortunatamente, qualunque cosa faccia, non riesco a mescolare caratteri jolly e spazi in un find
comando all'interno di uno script. L'esempio sopra restituisce i seguenti errori (notare il raddoppio imprevisto della barra rovesciata):
find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
Anche il tentativo di utilizzare le virgolette non riesce.
SEARCH="te*/'my files'/more"
find ${SEARCH} -print
Ciò restituisce i seguenti errori, avendo ignorato il significato delle virgolette:
find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
Ecco un altro esempio.
SEARCH='te*/my files/more'
find ${SEARCH} -print
Come previsto:
find: ‘te*/my’: No such file or directory
find: ‘files/more’: No such file or directory
Ogni variazione che ho provato restituisce un errore.
Ho una soluzione alternativa, che è potenzialmente pericolosa perché restituisce troppe cartelle. Converto tutti gli spazi in un punto interrogativo (carattere jolly a carattere singolo) in questo modo:
SEARCH='te*/my files/more'
SEARCH=${SEARCH// /?} # Convert every space to a question mark.
find ${SEARCH} -print
Questo è l'equivalente di:
find te*/my?files/more -print
Ciò restituisce non solo le cartelle corrette, ma anche terse/myxfiles/more
ciò che non dovrebbe.
Come posso ottenere quello che sto cercando di fare? Google non mi ha aiutato :(
find "${SEARCH}" -print
?
te*/'my files'/more
.
SEARCH: command not found
con l'find -print
esecuzione del comando .