Considérese el siguiente script:
#!/bin/sh
set -x
find `pwd` -name "file.ext" -exec echo $(dirname {}) \;
set -x
muestra cómo las obras de ampliación y lo que la orden final es. Cuando se ejecuta, da el siguiente resultado:
++ pwd
++ dirname '{}'
+ find /home/kibab -name file.ext -exec echo . ';'
Por lo tanto, lo primero que se expande es la pwd
. El segundo es $(dirname {})
. El resultado de esos dos comandos se coloca en el comando find. Por lo tanto, está diciendo find al -exec echo .
, por lo que está viendo el resultado esperado.
Cuando sustituyes basename
para dirname
, la expansión tiene lugar todavía, pero los resultados de la expansión son diferentes:
pwd
se expande a la ruta actual. En mi ejemplo anterior, el resultado es /home/kibab
basename {}
se ejecuta. El resultado de este comando es {}
.
El comando buscar se ejecuta con las sustituciones anteriores en su lugar. El último comando ejecutado se ve así:
find /home/kibab -name '*.png' -exec echo '{}' ';'
Al inspeccionar el comando anterior, se dará cuenta que el comando ahora simplemente eco de cualquier archivo fue encontrado.
¿Quizás quieres algo como esto?
find `pwd` -name "file.ext" -printf "%f\n"
@ Martin - Buen punto, explicación agregada. –
Esto ayudó mucho. No sabía acerca de set -x, y el único contexto que he usado basename/dirname fue cuando lo estaba configurando en una variable. – temp2290
Es posible que desee echar un vistazo a 'set -v' y algunas de las otras opciones del conjunto también. Buena suerte. –