Quiero scp
un 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 sep
hacerlo con ella. ¿Cómo puedo obtener el camino?
99
scp
versiones siguen enlaces simbólicos por defecto, ¿no? Deberías revisar el tuyo y quizás ahorrarte algo de trabajo.scp -r
obliga a seguir los enlaces simbólicos.Respuestas:
Prueba esta línea:
Si
command
está en su$PATH
variable, de lo contrario, debe especificar la ruta que conoce.fuente
-f
devolverá una ruta a un objetivo final inexistente, siempre que existan los objetivos de enlace intermedio ... Use-e
para evitar esto, es decir.-e
devolverá nulo si el objetivo final no existe.-f
errado conreadlink: illegal option -- f
en OSX. Eliminarlo funcionó bien.greadlink
.En Linux,
readlink
lee el contenido de un enlace simbólico yreadlink -f
sigue 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
-p
conserva 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
-a
conserva 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/localtime
como ejemploOperación
Usando stat
Usando readlink
Parece que ese comando
readlink -f
es 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_NAME
fuente
readlink
no 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