encontrar uso con -L


34

yo tengo

link -> file

hago

find -L . -name 'link'

Y obten

./link

¿Porqué es eso?

el hombre encuentra dice:

-L: Seguir enlaces simbólicos. Cuando find examina o imprime información sobre archivos, la información utilizada se tomará de las propiedades del archivo al que apunta el enlace, no del enlace en sí (a menos que sea un enlace simbólico roto o find no pueda examinar el archivo a que apunta el enlace).

Respuestas:


12

Con -L, examina las propiedades del archivo: contenido o metadatos, no las del enlace. Por ejemplo, si lo usa -atime, verificará atimeel archivo, no el enlace:

$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$

testdir/linkfue creado después testdir/ref, pero el archivo al que apunta no lo fue.


1
¿Puedes explicarme tomando mi ejemplo? Lo que entiendo es esto: en mi ejemplo, find comienza su búsqueda. Encuentra ./link, ya que -L está en efecto, lo desreferencia y toma las propiedades de ./file. Compara el nombre de ./file con el patrón 'link' y, dado que no coincide, no debe informar ningún o / p. ¿Qué hay de malo en mi razonamiento?
Ankur Agarwal

Del manual de búsqueda que citó, "la información utilizada se tomará de las propiedades del archivo al que apunta el enlace". El nombre de un archivo no es una de sus propiedades, por lo que aún usa el nombre del enlace. Eso también es mucho más útil que el nombre del archivo real.
Kevin

"El nombre del archivo no es una de sus propiedades" No lo sabía. ¿Algún otro atributo de los archivos que no se consideran propiedades? Para ser honesto, todavía soy escéptico y esperaría lo que otros tengan que decir.
Ankur Agarwal

Igual que @abc, no sabía que un nombre de archivo no es una propiedad de archivo. ¿Dónde puedo encontrar esta información en alguna documentación y / o página (s) de manual? Consulte dónde puedo obtener más información sobre las propiedades de un archivo.
bromista

34

La regla general es que si un comando opera en enlaces (es decir, entradas de directorio, que son punteros a inodes), el comando trata los enlaces simbólicos como ellos mismos en lugar de como el objeto al que apunta el enlace. De lo contrario, el comando opera en lo que apunta el enlace simbólico. Por lo tanto, cpsigue los enlaces simbólicos de forma predeterminada y copia el contenido del archivo señalado por el enlace. Pero cuando solicita cplidiar con entradas de directorio especificando -R, deja de seguir enlaces simbólicos. mvsiempre funciona con entradas de directorio, por lo que nunca sigue enlaces simbólicos.

La findactividad normal del comando es operar en entradas de directorio, por lo que los enlaces simbólicos no se siguen de forma predeterminada. Agregar -Lcausas findpara seguir enlaces simbólicos para todas las propiedades, excepto la que no se puede ignorar al hacer una búsqueda en el directorio, el nombre. Uno de los propósitos de find -namees proporcionar entrada para comandos como mvy rm, que operan en entradas de directorio. Habría resultados desagradables y sorprendentes si find -L dir -namepudiera producir nombres que apuntaran fuera del árbol de directorios en el que se arraiga dir.


¡GUAUU! ¿Por qué este concepto sutil no está bien ilustrado en las páginas de manual (a menos que me lo haya perdido)? Esta es una gran sorpresa para mí.
Ankur Agarwal

2
@Kyle Jones There would be unpleasant and surprising results if find -L dir -name` podría producir nombres que apunten fuera del árbol de directorios enraizado en dir.` => ¿no debería ser eso: habría desagradable ... si find dir -name pattern...? porque agregar -L permite apuntar a un directorio externo
timotheecour

Entonces, ¿cómo llegar cp -Ra copiar cosas bajo un enlace simbólico?
javadba
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.