¿Es un error que, cuando obtengo find ./path/here/
:
./path/here//foo
./path/here//bar
Sé que find
quiere que especifique la ruta sin la barra diagonal, pero seguramente puede detectar la ruta que me deja al completar tabulaciones y ajustar su salida en consecuencia. ¿Hay alguna razón por la que no es así?
Respuesta1
Técnicamente, es un error, porqueestados POSIXeso
todos los nombres de ruta para otros archivos encontrados en la jerarquía consistirán en la concatenación del operando de ruta actual, una <barra>si el operando de la ruta actual no termina en unoy el nombre del archivo relativo al operando de ruta
Perola doble barra no hace ninguna diferencia, entonces ./path/here//foo
y ./path/here/foo
son siempre el mismo archivo. (Una doble barra hace una diferencia si está al comienzo del camino en algunas variantes de Unix. Si la suya lo hace, es de esperar que find
trate este caso de manera especial).
Respuesta2
Para que conste, una razón por la que se podría usar find some/dir/
en lugar de find some/dir
es cuando some/dir
en realidad es un enlace simbólico a un directorio y desea find
buscar archivos en el directorio al que apunta ese enlace simbólico.
Pero, en ese caso, hay una alternativa mejor:
find -H some/dir
-H
es una opción admitida por algunas utilidades POSIX ( ls
, cp
, chmod
...) que le indica a la utilidad que siga los enlaces simbólicos pasados como argumentos (y solo esos, que no deben confundirse con -L
/ -follow
que provoca find
que se sigancadaenlace simbólico, los pasados como argumentos pero también los encontrados durante el recorrido del directorio).
Eso todavía no es funcionalmente equivalente al find some/dir/
caso en el que some/dir
en realidad no es un directorio. En ese caso, find some/dir/
fallaría con unNo es un directorioerror while find -H some/dir
enumeraría ese archivo que no es de directorio.