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