Quiero scpun archivo a un servidor. El archivo es un enlace simbólico, y en realidad lo que quiero hacer es copiar el archivo fuente. De todos modos, no quiero rastrear la ruta del archivo fuente manualmente, porque puede ser reemplazado. Si puedo obtener la ruta absoluta del archivo fuente, puedo sephacerlo con ella. ¿Cómo puedo obtener el camino?
99

scpversiones siguen enlaces simbólicos por defecto, ¿no? Deberías revisar el tuyo y quizás ahorrarte algo de trabajo.scp -robliga a seguir los enlaces simbólicos.Respuestas:
Prueba esta línea:
Si
commandestá en su$PATHvariable, de lo contrario, debe especificar la ruta que conoce.fuente
-fdevolverá una ruta a un objetivo final inexistente, siempre que existan los objetivos de enlace intermedio ... Use-epara evitar esto, es decir.-edevolverá nulo si el objetivo final no existe.-ferrado conreadlink: illegal option -- fen OSX. Eliminarlo funcionó bien.greadlink.En Linux,
readlinklee el contenido de un enlace simbólico yreadlink -fsigue enlaces simbólicos a enlaces simbólicos a enlaces simbólicos, etc., hasta que encuentra algo que no es un enlace simbólico.Sin embargo, esto no es necesario para scp: scp siempre sigue enlaces simbólicos (siempre copia el contenido del archivo, ignorando los metadatos, excepto que
-pconserva los tiempos y modos del archivo cuando es posible).Si se siente decepcionado por los metadatos que scp puede y no puede preservar, le sugiero que use rsync. Sin opción, rsync copia el contenido del archivo ignorando los metadatos. La opción de uso común
-aconserva todos los metadatos de variedades de jardín (tiempos, enlaces simbólicos, permisos y propiedad), y hay opciones para preservar metadatos exóticos como ACL y enlaces duros.fuente
Yo uso de comandos
ls,stat,readlink.Toma el archivo
/etc/localtimecomo ejemploOperación
Usando stat
Usando readlink
Parece que ese comando
readlink -fes mejor.Explicación
fuente
Stat le dará esta información:
fuente
Puedes hacer
o puedes obtener algo similar en Linux con
Si está agregando esto a un script, inspeccione el error. Si no desea ver el mensaje de error en el caso de que el enlace sym no esté allí, vaya con algo como
fuente
Me gustaría utilizar
realpath <symlink>.Probablemente lo que llamas 'fuente' es el archivo 'objetivo' de acuerdo con el uso de
ln:Usage: ln [OPTION]... [-T] TARGET LINK_NAMEfuente
readlinkno lo corté ... estúpido mac. lolreadlink -f 'which java'No funcionó para mí.Pero esto hizo:
fuente
`no'.. pero$()es mejor la práctica de todos modos.$()es una mejor práctica.command, pero esto está en desuso. usar $ () es mejor, porque la encapsulación $ ($ (comando)) es mucho más fácil y no necesita un escape especial. Entonces se prefiere. En su primer ejemplo, usó el apóstrofe habitual, luego readlink está tratando de encontrar el archivo llamado 'which java' con espacio en su nombre. Pero su intención es llamar al comando que con el argumento java, para encontrar la ruta ejecutable binaria java.En MAC OX, el parámetro "-f" no funciona, 'readlink' funciona sin ningún parámetro.
fuente