我想要 scp一个文件到服务器。该文件是一个符号链接,实际上我想做的是复制源文件。
我不想手动跟踪源文件的路径,因为它可以被替换。
我如何获得源文件的绝对路径,以便我可以scp使用它?
dai*_*isy 161
试试这一行:
readlink -f `which command`
Run Code Online (Sandbox Code Playgroud)
如果command在您的$PATH变量中,否则您需要指定您知道的路径。
Gil*_*il' 28
在 Linux 下,readlink读取符号链接的内容,并readlink -f按照符号链接到符号链接到符号链接等,直到找到不是符号链接的内容。
不过,这对于 scp 来说不是必需的:scp 始终遵循符号链接(它始终复制文件内容,忽略元数据,除非-p在可能的情况下保留文件时间和模式)。
如果您发现自己对 scp 可以保留和不能保留的元数据感到失望,我建议您使用 rsync。如果没有选项,rsync 会复制文件内容而忽略元数据。常用选项-a保留所有种类繁多的元数据(时间、符号链接、权限和所有权),还有一些选项可以保留奇特的元数据,如 ACL 和硬链接。
小智 11
我使用命令ls, stat, readlink。
以文件/etc/localtime为例
[flying@lempstacker ~]$ ls /etc/localtime
/etc/localtime
[flying@lempstacker ~]$ ls -l /etc/localtime
lrwxrwxrwx. 1 root root 35 Aug 2 22:41 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
Run Code Online (Sandbox Code Playgroud)
使用统计
[flying@lempstacker ~]$ stat /etc/localtime
File: ‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’
Size: 35 Blocks: 0 IO Block: 4096 symbolic link
Device: fd01h/64769d Inode: 272202388 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-11-23 09:00:59.999887800 +0800
Modify: 2016-08-02 22:41:26.090389904 +0800
Change: 2016-08-02 22:41:26.090389904 +0800
Birth: -
[flying@lempstacker ~]$ stat -c "%N" /etc/localtime
‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’
Run Code Online (Sandbox Code Playgroud)
使用阅读链接
[flying@lempstacker ~]$ readlink /etc/localtime
../usr/share/zoneinfo/Asia/Shanghai
[flying@lempstacker ~]$ readlink -f /etc/localtime
/usr/share/zoneinfo/Asia/Shanghai
Run Code Online (Sandbox Code Playgroud)
似乎那个命令readlink -f更好。
-f,--canonicalize:通过递归跟踪给定名称的每个组件中的每个符号链接来规范化;除了最后一个组件之外的所有组件都必须存在——来自
man readlink
Stat 将为您提供以下信息:
$ stat current
File: `current' -> `/home/user/releases/build/'
...
Run Code Online (Sandbox Code Playgroud)
你可以这样做
readlink -f `which command`
Run Code Online (Sandbox Code Playgroud)
或者你可以在 Linux 中得到类似的东西
stat `which command` | grep File
Run Code Online (Sandbox Code Playgroud)
如果要将其添加到脚本中,请检查错误。如果您不想在符号链接不存在的情况下看到错误消息,请使用类似
readlink -f "`which command`"
Run Code Online (Sandbox Code Playgroud)
我会用realpath <symlink>.
根据以下用法,您所说的“源”可能是“目标”文件ln:Usage: ln [OPTION]... [-T] TARGET LINK_NAME
| 归档时间: |
|
| 查看次数: |
219690 次 |
| 最近记录: |