通过符号链接下载(使用 scp?)文件时是否可以将其保存在原始文件名下?

通过符号链接下载(使用 scp?)文件时是否可以将其保存在原始文件名下?

在服务器上,目录结构已经是这样组织的。 (为了争论,我无法改变它。我只能想办法让它对我更有用。)

/work/product/versions/app-0.98
/work/product/versions/app-1.0
/work/product/versions/app-1.1
/work/product/versions/app-1.2

每个目录里面都有几个文件,例如:

/work/product/versions/app-0.98/app-0.98.1234
/work/product/versions/app-0.98/app-0.98.1235
/work/product/versions/app-0.98/app-0.98.1236
/work/product/versions/app-0.98/app-0.98.1237

当我获得我喜欢的版本时,我想将其符号链接到release,例如:

ln -s /work/product/versions/app-0.98/app-0.98.1237 /work/product/versions/app-0.98/release

这样,我始终可以通过请求文件来下载经过验证的版本release。我这样下载它们:

scp me@host01:/work/product/versions/app-0.98/release .

在我的本地文件系统上,我留下了一个名为“release”的文件。

me@host01:/home/me# ls -al
total 528948
drwxr-xr-x 2 me me      4096 Feb  6 12:24 .
drwxr-xr-x 8 me me      4096 Feb  2 13:03 ..
-rwxr-xr-x 1 me me 541627065 Feb  6 12:25 release

我希望该文件的名称与原始文件相同,app-0.98.1237.我可以在服务器上或在调用中更改某些内容scp以使用原始文件名保存文件吗?

我使用各种操作系统,主要是 Linux - Debian 和 CentOS 发行版。

答案1

我能想到的最接近的是一个两步过程,该过程使用rsync而不是裸露scp(rsync 可以用作scp其后端):

首先,复制链接本身:

rsync -a username@host:/path/to/release .

然后,复制目标可能是什么:

rsync -za username@host:"$(basename "$(readlink release)")" .

然后你会得到这样的结果:

$ ls -l
total 0
drwxrwxr-x  3 username  groupname  96 Feb  6 11:10 1.02
lrwxrwxrwx  1 username  groupname   4 Feb  6 11:09 release -> 1.02

相关内容