Estoy tratando de enumerar todos los nombres de archivo (el nombre base, no la ruta completa) debajo de mi directorio de inicio usando find. Traté de hacer:
find ~/ -type f -exec echo $(basename "{}") ";"
Sin embargo, termino teniendo una lista de rutas completas, y no solo de los nombres básicos como me gustaría. Ahora uso echo
, pero idealmente el resultado de $(basename "{}")
debería ser el argumento de alguna otra función que quiero escribir.
¿Por qué la función basename no se aplica correctamente?
Respuestas:
El shell está interpretando el
$(...)
antes de que se ejecutefind
. Si desea que el shell de búsqueda lo ejecute, deberá detener la sustitución de bash. Podemos hacer eso así:La clave aquí son las comillas simples; Bash no tocará nada dentro de esos.
fuente