find
interpreta un guion al comienzo de un nombre de archivo como el inicio de una opción. Usar el conocido truco --
no funciona, ya que las opciones están después del nombre del archivo, las citas no tienen ningún efecto y tampoco funciona el reemplazo del primer guión con \-
. A menudo se anima a los usuarios a que precedan dichos nombres de archivo con ./
, pero ¿qué puedo hacer si no sé si la ruta dada será absoluta o relativa?buscar en el directorio que comienza con el guión
Editar: Una solución es find "$(readlink -f -- "$test_filename")"
, pero es fea. Alguna mejor idea?
Editar 2: Gracias por las sugerencias. Aquí están los dos guiones que resultaron de este esfuerzo: safe-find.sh; safe-count-files.sh
Mi respuesta antes de la edición del OP hubiera de hecho, implicó readlink porque es menos esotérico que mi primer oneliner. Una desventaja es que lanza dos procesos más (un shell bifurcado y un readlink) y que si tiene múltiples directorios como argumentos para encontrar, aplicando readlink a todos ellos requerirá al menos un bucle y algunos trucos. – thkala
@thkala: Me di cuenta de eso. '$ (exec readlink -f -" $ file ")' previene una de las bifurcaciones, en el gasto de legibilidad –
@larsmans: la respuesta de thkala tiene la ventaja de funcionar en sistemas que no tienen 'readlink -f' (solo GNU, NetBSD y OpenBSD lo tienen). – Gilles