scp転送を実行して、特定のディレクトリにある最新の(最新の)ファイルをローカルディレクトリにダウンロードしたいと思います。
このようなもの:
- ソース:
root@rimmer.sk:/home/rimmer/backups/
- 目的地:
/home/rimmer/backups/
最新のファイルのみを取得しますが、すべてではありませんbackups
。
scp転送を実行して、特定のディレクトリにある最新の(最新の)ファイルをローカルディレクトリにダウンロードしたいと思います。
このようなもの:
root@rimmer.sk:/home/rimmer/backups/
/home/rimmer/backups/
最新のファイルのみを取得しますが、すべてではありませんbackups
。
回答:
変数がserver
あり、dir
定義されているとしましょう。
$ dir="~"
$ server="user@server.com"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .
最初に最新のファイルを探し、それをコピーする場所。
注:私はそれが絶対確実であることを確認しませんでした(たとえば、最新のエントリがフォルダーである)
scp
getが中断された場合、コピーを最初から再開する必要があり、中断rsync
したところから再開できます。
ssh
。
/*
2番目の$ 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/
これにより、欠落しているファイルまたは変更されたファイルのみが、最終日のrimmer.skのバックアップディレクトリ(-ctime -1)からローカルバックアップのディレクトリにコピーされます。
-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
。