web-dev-qa-db-ja.com

scpを使用してフォルダー内の最新のファイルをダウンロードする方法

Scp転送を実行して、特定のディレクトリにある最新の(最新の)ファイルをローカルディレクトリにダウンロードしたいと思います。

このようなもの:

backups内のすべてではなく、最新のファイルのみを取得します。

10

変数serverdirが定義されているとすると、次のことができます

$ dir="~"
$ server="[email protected]"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .

最初に最新のファイルを探し、それをコピーする場所。

注:私はそれが絶対確実であることを確認しませんでした(たとえば、最新のエントリがフォルダーである)

12
Bernhard

scpは、ファイルをソースから宛先に盲目的にコピーするという意味でばかげています。ファイルのコピーに関してよりインテリジェントなものが必要な場合は、rsyncなどのツールを使用する必要があります。

$ rsync -avz [email protected]:'$(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.

参考文献

1
slm

パーティーには少し遅れますが、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
0
DRAD