Eu quero usar find
para encontrar arquivos em um conjunto de pastas restritas por curingas, mas onde existem espaços no nome do caminho.
Na linha de comando, isso é fácil. Os exemplos a seguir todos funcionam.
find te*/my\ files/more -print
find te*/'my files'/more -print
find te*/my' 'files/more -print
Eles encontrarão arquivos em, por exemplo, terminal/my files/more
e tepid/my files/more
.
No entanto, eu preciso que isso faça parte de um script; o que eu preciso é algo como isto:
SEARCH='te*/my\ files/more'
find ${SEARCH} -print
Infelizmente, não importa o que eu faça, não consigo misturar curingas e espaços em um find
comando em um script. O exemplo acima retorna os seguintes erros (observe a duplicação inesperada da barra invertida):
find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
A tentativa de usar aspas também falha.
SEARCH="te*/'my files'/more"
find ${SEARCH} -print
Isso retorna os seguintes erros, tendo ignorado o significado das aspas:
find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
Aqui está mais um exemplo.
SEARCH='te*/my files/more'
find ${SEARCH} -print
Como esperado:
find: ‘te*/my’: No such file or directory
find: ‘files/more’: No such file or directory
Toda variação que eu tentei retorna um erro.
Eu tenho uma solução alternativa, que é potencialmente perigosa porque retorna muitas pastas. Converto todos os espaços em um ponto de interrogação (curinga de um caractere) assim:
SEARCH='te*/my files/more'
SEARCH=${SEARCH// /?} # Convert every space to a question mark.
find ${SEARCH} -print
Isso é equivalente a:
find te*/my?files/more -print
Isso retorna não apenas as pastas corretas, mas também o terse/myxfiles/more
que não deveria.
Como posso conseguir o que estou tentando fazer? O Google não me ajudou :(
find "${SEARCH}" -print
?
te*/'my files'/more
.
SEARCH: command not found
com o comandofind -print
sendo executado.