![通过符号链接下载(使用 scp?)文件时是否可以将其保存在原始文件名下?](https://linux22.com/image/127089/%E9%80%9A%E8%BF%87%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E4%B8%8B%E8%BD%BD%EF%BC%88%E4%BD%BF%E7%94%A8%20scp%EF%BC%9F%EF%BC%89%E6%96%87%E4%BB%B6%E6%97%B6%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%B0%86%E5%85%B6%E4%BF%9D%E5%AD%98%E5%9C%A8%E5%8E%9F%E5%A7%8B%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%8B%EF%BC%9F.png)
在服务器上,目录结构已经是这样组织的。 (为了争论,我无法改变它。我只能想办法让它对我更有用。)
/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