我想运行一次scp传输,将某个目录中的最新(最新)文件下载到我的本地目录中。
像这样:
- 来源:
root@rimmer.sk:/home/rimmer/backups/
- 目的地:
/home/rimmer/backups/
虽然仅在中获取最新文件,而不是所有文件backups
。
我想运行一次scp传输,将某个目录中的最新(最新)文件下载到我的本地目录中。
像这样:
root@rimmer.sk:/home/rimmer/backups/
/home/rimmer/backups/
虽然仅在中获取最新文件,而不是所有文件backups
。
Answers:
假设你有变量server
和dir
定义,你可以做
$ dir="~"
$ server="user@server.com"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .
首先在哪里寻找最新文件,然后将其复制。
注意:我没有检查它的安全性(例如,最新条目是文件夹)
scp
获取中断,则必须从头开始重新开始复制,然后rsync
可以从中断处重新开始。
ssh
。
/*
在第二个$ dir的末尾添加a ):scp $server:$(ssh $server 'ls -t $dir/* | head -1') .
scp
它只是愚蠢的,因为它只是盲目地将文件从源复制到目标。如果您想要更智能的复制文件,则需要使用诸如的工具rsync
。
$ rsync -avz root@rimmer.sk:'$(find /home/rimmer/backups/ -ctime -1)' /home/rimmer/backups/
这只会将前一天(-ctime -1)的rimmer.sk备份目录中丢失或更改的文件复制到本地备份目录中。
-ctime n
File's status was last changed n*24 hours ago. See the comments for
-atime to understand how rounding affects the interpretation of file
status change times.
聚会晚了一点,但是也许使用ssh和rsync的解决方案对某些人有用:
source_host="yourhost.com"
source_dir="/a/dir/on/yourhost.com/"
target_dir="/the/dir/where/last_backup/will/be/placed"
last_backup=$(ssh user@${source_host} "ls -t ${source_dir} | head -1")
if [ "${last_backup}" == "" ]; then
echo "ERROR: didn't find a backup, cannot continue!"
else
echo "the last backup is: ${last_backup}"
rsync -avzh user@${source_host}:${source_dir}/${last_backup} ${target_dir}
fi
scp -r
。