Quiero usar find
para buscar archivos en un conjunto de carpetas restringido por comodines, pero donde hay espacios en el nombre de la ruta.
Desde la línea de comandos, esto es fácil. Los siguientes ejemplos funcionan todos.
find te*/my\ files/more -print
find te*/'my files'/more -print
find te*/my' 'files/more -print
Estos encontrarán archivos en, por ejemplo, terminal/my files/more
y tepid/my files/more
.
Sin embargo, necesito que esto sea parte de un script; lo que necesito es algo como esto:
SEARCH='te*/my\ files/more'
find ${SEARCH} -print
Desafortunadamente, haga lo que haga, parece que no puedo mezclar comodines y espacios en un find
comando dentro de un script. El ejemplo anterior devuelve los siguientes errores (observe la duplicación inesperada de la barra invertida):
find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
Intentar usar comillas también falla.
SEARCH="te*/'my files'/more"
find ${SEARCH} -print
Esto devuelve los siguientes errores, habiendo ignorado el significado de las citas:
find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
Aquí hay un ejemplo más.
SEARCH='te*/my files/more'
find ${SEARCH} -print
Como se esperaba:
find: ‘te*/my’: No such file or directory
find: ‘files/more’: No such file or directory
Cada variación que he intentado devuelve un error.
Tengo una solución alternativa, que es potencialmente peligrosa porque devuelve demasiadas carpetas. Convierto todos los espacios en un signo de interrogación (comodín de un solo carácter) como este:
SEARCH='te*/my files/more'
SEARCH=${SEARCH// /?} # Convert every space to a question mark.
find ${SEARCH} -print
Este es el equivalente de:
find te*/my?files/more -print
Esto devuelve no solo las carpetas correctas, sino también terse/myxfiles/more
, lo que no se supone que debe hacer.
¿Cómo puedo lograr lo que intento hacer? Google no me ha ayudado :(
find "${SEARCH}" -print
?
te*/'my files'/more
.
SEARCH: command not found
lafind -print
ejecución del comando .